vb.net - significa - operadores relacionales en visual basic
En VB.NET, ¿por qué debería usar Select, en lugar de If? (5)
Recientemente me gradué y comencé un trabajo real. En nuestro entrenamiento nos han estado exponiendo a VB.NET y muchas de las características que usan aquí. En algunos de los ejemplos, han usado sentencias Select
(y en algunos lugares se usaron donde debería haberse usado realmente If/Else
).
La única vez que utilicé una instrucción switch / select en otros idiomas (aparte de las asignaciones que lo requerían) fue cuando quise pasar a la siguiente declaración.
Dado que VB.NET no se ha caído, ¿qué casos (si hay alguno) hay para usar la instrucción Select
? ¿Hay algún caso en el que brinde ventajas sobre la declaración If/ElseIf
?
En primer lugar, VB sí se ha caído, simplemente no es tan obvio. El "paso adelante" en VB es simplemente establecer un caso para tener múltiples valores:
Dim number As Integer = 8
Select Case number
Case 6,7,8
'' do stuff
Case Else
'' do default stuff
End Select
En cuanto a sus ventajas, es mucho más fácil escribir una declaración Select
que decir, más de tres declaraciones If/ElseIf
que todas prueban contra el mismo valor.
Si vas a hacer varias cosas diferentes en función de la comparación de entrada / comparación de rango si es if-elseif +, entonces usa bloques Select
lugar de crazy if-elseif.
La declaración Select de VB.NET también tiene algunas funciones geniales, así que asegúrese de conocer todas las características.
Select Case
, no solo Select
.
Para mí, es una de las mejores características del lenguaje.
Es mucho más visual cuando tienes varios valores posibles para contrastar.
select case some_var case 1 something() case 2 something_else() case 3 etc() end select
Es mucho más legible cuando se trata de rangos de prueba:
select case some_var case 1 to 10 something() case 20 to 30 something_else() case is > 100 etc() end select
Es mucho más legible cuando tienes que probar un montón de condiciones más complejas, asegurándote de que solo se seleccione una:
select case true case string.isnullorempty(a_string) something() case a_string.length < 5 something_else() case a_string = b_string etc() end select
Es superior al
switch
C / C ++ en el sentido de que permite expresiones como puntos de ramificación, no solo constantes.Al usar constantes como puntos de ramificación (ejemplo 1), el compilador puede generar un código más optimizado con saltos directos.
Select
le dice al compilador que cada comparación (If) en el conjunto análogo de bloques If / Else tiene el mismo valor, y esto le permite realizar ciertas optimizaciones que son más difíciles de asegurar de lo contrario. Por ejemplo, podría estar más ansioso por generar código de máquina que contenga ese valor en un registro de CPU (eso es solo hipotético ... diferentes compiladores pueden hacer lo que quieran).
Además, algunos de nosotros encontramos Select
mucho más legible. Es importante seguir los estándares de codificación de cualquier equipo o unidad que se encuentre.
Hay una situación en la que Select Case puede ser mucho más eficiente que If: cuando tiene una lista de cláusulas "O" en la condición If y no necesita evaluarlas todas para establecer la verdad de la condición. Supongamos que tiene una instrucción if como esta:
If A() Or B() Then
DoSomething()
ElseIF C() or D() Then
DoSomethingElse()
Else
DoTheDefault()
EndIF
En este caso, para evaluar la primera instrucción if, se ejecutan ambas funciones A () y B (), y de manera similar para la segunda instrucción if cuando A () y B () son ambos falsos. Si A () devuelve verdadero, entonces el valor de B () es inmaterial y, a menos que cambie el estado del programa de una manera que realmente lo desee (generalmente no es una buena práctica), la ejecución de B () es redundante. El compilador está limitado por el requisito de que todas las partes de la prueba DEBEN ejecutarse antes de concluir en un valor (la optimización de la prueba no está permitida según la especificación del idioma).
Puede separar las condiciones en múltiples declaraciones IfElse para optimizarlo usted mismo, pero esto hace que el código sea menos legible y aumenta el peligro de errores cuando los cambios se realizan más adelante. Encuentro que usar Select Case es mejor en esta situación:
Select Case True
Case A(), B()
DoSomething()
Case C(), D()
DoSomethingElse()
Case Else
DoTheDefault()
End Select
Ahora, si A () devuelve True, B () no se evalúa en absoluto. La evaluación de las condiciones se detalla en la secuencia, por lo que puede ayudarlo a optimizar su código colocando las pruebas en el orden de las que es más probable que devuelva verdadero o menos costoso de ejecutar (dependiendo de la aplicación).