LOS OPERADORES LOGICOS DE VISUAL  BASIC

Los operadores lógicos comparan expresiones Boolean y devuelven un resultado Boolean. Los operadores And,OrAndAlsoOrElse 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.

Operador lógico unario

 

 

El Not (Operador, Visual Basic) realiza la negación lógica en una expresión Boolean. Produce el contrario lógico de su operando. Si la expresión se evalúa como TrueNot 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.


Operadores lógicos binarios

 

 

El And (Operador, Visual Basic) realiza la conjunción lógica de dos expresiones Boolean. Si ambas expresiones se evalúan como TrueAnd devuelve True. Si al menos una de las expresiones se evalúa como FalseAnd devuelveFalse.

El Or (Operador, Visual Basic) realiza la disyunción o inclusión lógicas de dos expresiones Boolean. Si una de las expresiones o ambas se evalúan como TrueOr devuelve True. Si ninguna de las expresiones se evalúa comoTrueOr devuelve False.

Xor (Operador, Visual Basic) realiza la exclusión lógica de dos expresiones Boolean. Si exactamente una expresión, pero no ambas, se evalúa como TrueXor devuelve True. Si ambas expresiones se evalúan como Trueo como FalseXor devuelve False.

En el siguiente ejemplo se muestra cómo utilizar los operadores AndOr 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.


Cortocircuitar las operaciones lógicas

 

 

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. La diferencia clave entre ambos es que AndAlso presenta un comportamiento de evaluación "cortocircuitada". Si la primera parte de una expresión 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. Si la primera parte de una expresión 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.

wz3k228a.collapse_all(es-es,VS.120).gifInconvenientes de las evaluaciones cortocircuitadas

 

Cortocircuitar puede mejorar el rendimiento ya que no se evalúa una expresión que no puede modificar el resultado de la operación lógica. Sin embargo, si esa expresión realiza acciones adicionales, al cortocircuitar se pasan por alto esas acciones. Por ejemplo, si la expresión incluye una llamada a un procedimiento Function, no se llama a ese procedimiento si la expresión se cortocircuita y el código adicional incluido en Function no se ejecuta. Por consiguiente, la función únicamente se puede ejecutar de vez en cuando y no se puede probar correctamente. También, la lógica del programa puede depender del código en la Function.

En el ejemplo siguiente se muestra la diferencia entre AndOr 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. La primera instrucción If llama a checkIfValid() aunque 12 > 45 devuelveFalse, porque And no cortocircuita. La segunda instrucción If no llama a checkIfValid(), porque cuando 12 > 45 devuelve FalseAndAlso cortocircuita la segunda expresión. La tercera instrucción If llama a checkIfValid()aunque 12 < 45 devuelve True, porque Or no cortocircuita. La cuarta instrucción If no llama a checkIfValid(), porque cuando 12 < 45 devuelve TrueOrElse cortocircuita la segunda expresión.

Operaciones bit a bit

 

 

Las operaciones bit a bit evalúan dos valores enteros en formato binario (base 2). Comparan los bits en las posiciones correspondientes y, a continuación, asignan valores basados en la comparación. En el siguiente ejemplo se muestra cómo se utiliza el operador And.

 
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. El valor 001 es la representación binaria de 1, por lo que 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.Esto significa que para números positivos sin signo, Not siempre devuelve un valor negativo y, para números negativos, Not siempre devuelve un valor positivo o cero.

Los operadores AndAlso y OrElse no admiten las operaciones bit a bit.