AndAlso (Operador)
Actualización: noviembre 2007
Realiza una conjunción lógica "cortocircuitada" en dos expresiones.
result = expression1 AndAlso expression2
Partes
result
Obligatoria. Cualquier expresión de tipo Boolean. El resultado será el resultado Boolean de comparar ambas expresiones.expression1
Obligatoria. Cualquier expresión de tipo Boolean.expression2
Obligatoria. Cualquier expresión de tipo Boolean.
Comentarios
Se dice que una operación lógica se encuentra cortocircuitada si el código compilado puede omitir la evaluación de una expresión en función del resultado de otra. Si el resultado de la primera expresión evaluada determina el resultado final de la operación, no es necesario evaluar la segunda expresión, ya que no cambiará el resultado final. La evaluación cortocircuitada puede mejorar el rendimiento si la expresión omitida es compleja o si implica llamadas de procedimiento.
Si ambas expresiones se evalúan como True, result es True. En la tabla siguiente se ilustra cómo se determina el argumento result.
Si expression1 es: |
Y expression2 es |
El valor de result es: |
---|---|---|
True |
True |
True |
True |
False |
False |
False |
(no se evalúa) |
False |
Una utilidad del operador AndAlso es probar la existencia de una instancia de objeto antes de intentar tener acceso a uno de sus miembros. En la siguiente línea se muestra cómo hacerlo:
If newObject AndAlso newObject.initFinished Then
El acceso a la propiedad initFinished en la línea de código anterior podría producir una excepción NullReferenceException si la variable newObject no tiene una instancia de objeto asignada. Sin embargo, el operador AndAlso hace que el compilador omita el acceso a initFinished si newObject es Nothing, porque Nothing se evalúa como False.
Tipos de datos
El operador AndAlso sólo se define para Boolean (Tipo de datos, Visual Basic). Visual Basic convierte cada operando según sea necesario a Boolean y lleva a cabo toda la operación en Boolean. Si asigna el resultado a un tipo numérico, Visual Basic lo convierte de Boolean a ese tipo. Esto podría generar un comportamiento inesperado. Por ejemplo, 5 AndAlso 12 da como resultado –1 cuando se convierte a Integer.
Sobrecarga
Los operadores And (Operador, Visual Basic) e IsFalse (Operador) se pueden sobrecargar, lo que significa que una clase o estructura puede definir de nuevo su comportamiento cuando un operando pertenece al tipo de dicha clase o estructura. La sobrecarga de los operadores And y IsFalse afecta el comportamiento del operador AndAlso. Si el código utiliza AndAlso en una clase o estructura que sobrecarga And y IsFalse, asegúrese de conocer su comportamiento redefinido. Para obtener más información, vea Procedimientos de operador.
Ejemplo
En el ejemplo siguiente se utiliza el operador AndAlso para realizar la conjunción lógica de dos expresiones. El resultado será un valor de tipo Boolean que indicará si la expresión conjunta es en su totalidad verdadera (True). Si la primera expresión es False, no se evaluará la segunda.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b AndAlso b > c
secondCheck = b > a AndAlso b > c
thirdCheck = a > b AndAlso c > b
En el ejemplo anterior se generan los resultados de True, False y False, respectivamente. En el cálculo de secondCheck, no se evalúa la segunda expresión porque la primera ya es False. Sin embargo, la segunda expresión se evalúa en el cálculo de thirdCheck.
En el ejemplo siguiente se muestra un procedimiento Function que busca un valor determinado entre los elementos de una matriz. Si la matriz está vacía o si se sobrepasa su longitud, la instrucción While no comprueba el elemento de la matriz con el valor de búsqueda.
Public Function findValue(ByVal arr() As Double, _
ByVal searchValue As Double) As Double
Dim i As Integer = 0
While i <= UBound(arr) AndAlso arr(i) <> searchValue
' If i is greater than UBound(arr), searchValue is not checked.
i += 1
End While
If i > UBound(arr) Then i = -1
Return i
End Function
Vea también
Conceptos
Operadores lógicos y bit a bit en Visual Basic
Referencia
Operadores lógicos y operadores bit a bit
Prioridad de operador en Visual Basic