LOS OPERADORES LOGICOS EN VISUAL BASIC
Los operadores lógicos comparan expresiones Boolean y devuelven un resultado Boolean. And,Or, AndAlso, OrElse y Xor son binarios porque toman dos operandos, mientras que el operador Not es unarioporque toma un solo operando. Algunos de estos operadores también pueden realizar operaciones lógicas bit a bit en valores enteros.
El Not (Operador, Visual Basic) realiza la negación lógica en una expresión Boolean. Produce el contrario lógico de su operando. True, Not devuelve False; si la expresión se evalúa como False,Not devuelve True. Debido a que Object es la clase base de todos los tipos de referencia en .NET Framework, este comportamiento es heredado por los tipos de referencia que no reemplazan el método ToString.
Dim x, y As Boolean
x = Not 23 > 14
y = Not 23 > 67
' The preceding statements set x to False and y to True.
El And (Operador, Visual Basic) realiza la conjunción lógica de dos expresiones Boolean. True, And devuelve True. False, And devuelveFalse.
El Or (Operador, Visual Basic) realiza la disyunción o inclusión lógicas de dos expresiones Boolean. True, Or devuelve True. True, Or devuelve False.
Xor (Operador, Visual Basic) realiza la exclusión lógica de dos expresiones Boolean. True, Xor devuelve True. Trueo como False, Xor devuelve False.
And, Or y Xor.
Dim a, b, c, d, e, f, g As Boolean
a = 23 > 14 And 11 > 8
b = 14 > 23 And 11 > 8
' The preceding statements set a to True and b to False.
c = 23 > 14 Or 8 > 11
d = 23 > 67 Or 8 > 11
' The preceding statements set c to True and d to False.
e = 23 > 67 Xor 11 > 8
f = 23 > 14 Xor 11 > 8
g = 14 > 23 Xor 8 > 11
' The preceding statements set e to True, f to False, and g to False.
El AndAlso (Operador, Visual Basic) es muy similar al operador And, ya que también realiza la conjunción lógica de dos expresiones Boolean. AndAlso presenta un comportamiento de evaluación "cortocircuitada". AndAlso se evalúa como False, la segunda parte de la expresión no se evalúa porque no puede modificar el resultado final y AndAlso devuelve False.
De igual forma, el OrElse (Operador) (Visual Basic) realiza la disyunción lógica de evaluación cortocircuitada de dos expresiones Boolean. OrElse se evalúa como True, la segunda parte de la expresión no se evalúa porque no puede modificar el resultado final y OrElse devuelve True.
Inconvenientes de las evaluaciones cortocircuitadas
And, Or y sus homólogos de evaluación cortocircuitada.
Dim amount As Integer = 12
Dim highestAllowed As Integer = 45
Dim grandTotal As Integer
If amount > highestAllowed And checkIfValid(amount) Then
' The preceding statement calls checkIfValid().
End If
If amount > highestAllowed AndAlso checkIfValid(amount) Then
' The preceding statement does not call checkIfValid().
End If
If amount < highestAllowed Or checkIfValid(amount) Then
' The preceding statement calls checkIfValid().
End If
If amount < highestAllowed OrElse checkIfValid(amount) Then
' The preceding statement does not call checkIfValid().
End If
Function checkIfValid(ByVal checkValue As Integer) As Boolean
If checkValue > 15 Then
MsgBox(CStr(checkValue) & " is not a valid value.")
' The MsgBox warning is not displayed if the call to
' checkIfValid() is part of a short-circuited expression.
Return False
Else
grandTotal += checkValue
' The grandTotal value is not updated if the call to
' checkIfValid() is part of a short-circuited expression.
Return True
End If
End Function
En el ejemplo anterior, observe que una parte de código importante dentro de checkIfValid() no se ejecuta cuando se cortocircuita la llamada. If llama a checkIfValid() aunque 12 > 45 devuelveFalse, porque And no cortocircuita. If no llama a checkIfValid(), porque cuando 12 > 45 devuelve False, AndAlso cortocircuita la segunda expresión. If llama a checkIfValid()aunque 12 < 45 devuelve True, porque Or no cortocircuita. If no llama a checkIfValid(), porque cuando 12 < 45 devuelve True, OrElse cortocircuita la segunda expresión.
Dim x As Integer
x = 3 And 5
En el ejemplo anterior se establece el valor de x en 1. Esto pasa por las siguientes razones:
-
Los valores se tratan como binarios:
3 en formato binario = 011
5 en formato binario = 101
-
El operador And compara las representaciones binarias, una posición binaria (bit) a la vez. Si los dos bits en una posición dada son 1, entonces se coloca un 1 en esa posición del resultado. Si uno de los dos bits es 0, entonces se coloca un 0 en esa posición del resultado. En el ejemplo anterior, esto funciona como sigue:
011 (3 en formato binario)
101 (5 en formato binario)
001 (el resultado, en formato binario)
-
El resultado se trata como decimal. x = 1.
La operación Or bit a bit es similar, excepto en que se asigna 1 al bit resultante si cualquiera de los bits comparados es 1. Xor asigna 1 al bit del resultado si exclusivamente uno de los bits comparados (no ambos) es 1. Not toma un solo operando e invierte todos los bits, incluido el bit de signo, y asigna ese valor al resultado.Not siempre devuelve un valor negativo y, para números negativos, Not siempre devuelve un valor positivo o cero.
AndAlso y OrElse no admiten las operaciones bit a bit.