AndAlso (Operador, Visual Basic)

Realiza una conjunción lógica "cortocircuitada" en dos expresiones.

result = expression1 AndAlso expression2

Partes

Término

Definición

result

Obligatorio. Cualquier expresión de tipo Boolean. El resultado será el resultado Boolean de comparar ambas expresiones.

expression1

Obligatorio. Cualquier expresión de tipo Boolean.

expression2

Obligatorio. 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) (Visual Basic) 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 (Visual Basic).

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 supera 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

Referencia

Operadores lógicos y bit a bit (Visual Basic)

Prioridad de operador en Visual Basic

Operadores enumerados por funcionalidad (Visual Basic)

And (Operador, Visual Basic)

IsFalse (Operador) (Visual Basic)

Conceptos

Operadores lógicos y bit a bit en Visual Basic