¿Cuál es la diferencia entre And y AndAlso en VB.NET?
En VB.NET, ¿cuál es la diferencia entre And
y AndAlso
? ¿Cuál debo usar?
El And
operador evalúa ambos lados, donde AndAlso
evalúa el lado derecho si y sólo si el lado izquierdo es verdadero.
Un ejemplo:
If mystring IsNot Nothing And mystring.Contains("Foo") Then
' bla bla
End If
Lo anterior arroja una excepción simystring = Nothing
If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then
' bla bla
End If
Éste no arroja una excepción.
Entonces, si vienes del mundo C#, debes usarlo AndAlso
como lo harías &&
.
Más información aquí: http://www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso-and-orelse/
El And
operador verificará todas las condiciones en la declaración antes de continuar, mientras que el operador Andalso se detendrá si sabe que la condición es falsa. Por ejemplo:
if x = 5 And y = 7
Comprueba si x es igual a 5 y si y es igual a 7, luego continúa si ambos son verdaderos.
if x = 5 AndAlso y = 7
Comprueba si x es igual a 5. Si no es así, no comprueba si y es 7, porque sabe que la condición ya es falsa. (Esto se llama cortocircuito).
Generalmente, la gente usa el método de cortocircuito si hay una razón para no verificar explícitamente la segunda parte si la primera parte no es verdadera, como si arrojaría una excepción si se marca. Por ejemplo:
If Not Object Is Nothing AndAlso Object.Load()
Si se usara And
en lugar de AndAlso
, aún lo intentaría Object.Load()
incluso si lo fuera nothing
, lo que generaría una excepción.