Si se escriben expresiones que contienen operadores de distintas clases, se evaluarán en el orden expuesto más arriba. Todos los operadores de comparación tienen la misma prioridad, por lo que se ejecutarán, de izquierda a derecha en el orden en el que se hayan escrito. Los aritméticos y lógicos lo hacen en el siguiente orden:
Negativo (-). Indica el valor negativo de un número o una expresión: -3.
Multiplicación (*). Multiplica dos números: 3*2 = 6 .
División (/). Divide dos números, obteniendo un cociente de coma flotante: 5/2 = 2,5 .
División entera (\). Divide dos números, obteniendo un cociente entero: 5\2 = 2 . Para obtener el cociente entero, VBScript lo que hace es redondear primero los factores de la división aplicándoles un tipo de dato que no soporta decimales, como Integer, Long o Byte, y procediendo después a realizar la división.
Módulo aritmético (Mod). Divide dos números, obteniendo un resto entero: 11111111 Mod 23 = 18 . Para obtener el resto entero, VBScript lo que hace es redondear primero los factores de la división y una vez convertidos en enteros procede a realizarla.
Suma (+). Suma dos números: 3+2 = 5 . Si en lugar de números se suman cadenas, como por ejemplo "A"+"B" = "AB" se produce una concatenación. No debe utilizarse para este fin. El operador correcto para concatenar cadenas es &.
Resta (-). Halla la diferencia entre dos números. Ejemplo A: 3-2 = 1 . Ejemplo B: (-1)-(-2) = 1 .
Concatenación de cadenas (&). "A"&"B" = AB . Si alguno de los elementos a concatenar no es una cadena de texto, queda convertido a cadena: "AB"&123 = "AB123"
Aunque aparece aquí, el operador de concatenación (&) no es un operador aritmético, pero su prioridad hace que se ejecute después de todos los aritméticos y antes de todos los de comparación. La multiplicación y la división, tienen entre sí la misma prioridad, por lo que se ejecutan en el orden en que se hayan escrito en la expresión. Lo mismo sucede con la suma y la resta. Fíjate en que el signo negativo aparece en segunda posición del orden de prioridad, no confundir con la resta, que está en las últimas posiciones.
Por ejemplo, supongamos que hay que establecer el estado lógico de un material: El hierro. Evidentemente, para establecer un estado lógico primero tenemos que decidir respecto a qué se establece ese estado, ya que no podemos decir simplemente que el hierro es verdad o mentira. Nos tendremos que referir a alguna cualidad del material y compararla con algo para establecer si el estado es verdadero o falso.
Sea la expresión El hierro es un metal . Si tenemos que establecer el estado lógico de esta expresión, la respuesta inmediata es Verdadero (True) y si la expresión fuese El hierro no es un metal , inmediatamente pensarímos que el estado adecuado es Falso (False)
Una vez establecido el estado lógico de la expresión, los operadores lógicos nos permitián tomar decisiones mediante la verificación de ese estado, bien tomando uno solo, o agrupando varios de ellos. Al igual que los operadores aritméticos, los operadores lógicos tienen un orden preestablecido de evaluación:
Negación lógica (Not). Establece una negación lógica en una expresión, es decir, que ante una expresión, cuyo estado lógico es True (verdadero), el operador hará que devuelva False (falso).
El hierro es un metal = True.
Not El hierro es un metal = False.
Hay tres posibles resultados aplicando este operador a una expresión:
Si la expresión = True el operador devuelve False.
Si la expresión = False el operador devuelve True.
Si la expresión = Null el operador devuelve Null.
Conjunción lógica (And). Establece una conjunción lógica de dos expresiones, es decir, que han de resultar True (verdadero) las dos expresiones para que el resultado final también lo sea.
El hierro es un metal = True.
El hierro es duro = True.
El hierro es un metal And El hierro es duro = True.
Hay 9 posibles resultados aplicando este operador a dos expresiones, aunque es posible incluir cuantas sean necesarias:
Si la Expresión 1 = True And Expresión 2 = True el resultado es True.
Si la Expresión 1 = True And Expresión 2 = False el resultado es False.
Si la Expresión 1 = True And Expresión 2 = Null el resultado es Null.
Si la Expresión 1 = False And Expresión 2 = True el resultado es False.
Si la Expresión 1 = False And Expresión 2 = False el resultado es False.
Si la Expresión 1 = False And Expresión 2 = Null el resultado es False.
Si la Expresión 1 = Null And Expresión 2 = True el resultado es Null.
Si la Expresión 1 = Null And Expresión 2 = False el resultado es False.
Si la Expresión 1 = Null And Expresión 2 = Null el resultado es Null.
Como puedes ver, si, y sólo si, ambas expresiones se evalúan como True, el resultado es True. Si cualquiera de las expresiones es False, el resultado es False.
Disyunción lógica (Or). Establece una disyunción lógica de dos expresiones, es decir, que el resultado se dará evaluando una expresión u otra.
El hierro es un metal = True.
El hierro es duro = True.
El hierro es un metal Or El hierro es duro = True.
Hay 9 posibles resultados aplicando este operador a dos expresiones, aunque es posible incluir cuantas sean necesarias:
Si la Expresión 1 = True Or Expresión 2 = True el resultado es True.
Si la Expresión 1 = True Or Expresión 2 = False el resultado es True.
Si la Expresión 1 = True Or Expresión 2 = Null el resultado es True.
Si la Expresión 1 = False Or Expresión 2 = True el resultado es True.
Si la Expresión 1 = False Or Expresión 2 = False el resultado es False.
Si la Expresión 1 = False Or Expresión 2 = Null el resultado es Null.
Si la Expresión 1 = Null Or Expresión 2 = True el resultado es True.
Si la Expresión 1 = Null Or Expresión 2 = False el resultado es Null.
Si la Expresión 1 = Null Or Expresión 2 = Null el resultado es Null.
Como puedes ver, si cualquiera de las expresiones, o ambas, son True, el resultado es True.
Exclusión lógica (Xor). Establece una exclusión lógica de dos expresiones, es decir, que el resultado se dará evaluando una expresión u otra, y dará True si solamente una de ellas es True, lo que implica la exclusión de la otra.
El hierro es un metal = True.
El hierro es duro = True.
El hierro es un metal Xor El hierro es duro = False.
Hay 4 posibles resultados aplicando este operador a dos expresiones:
Si la Expresión 1 = True Xor Expresión 2 = True el resultado es False.
Si la Expresión 1 = True Xor Expresión 2 = False el resultado es True.
Si la Expresión 1 = False Xor Expresión 2 = True el resultado es True.
Si la Expresión 1 = False Xor Expresión 2 = False el resultado es False.
Como puedes ver, si una y sólo una de las expresiones es True, el resultado es True. Si cualquiera de las expresiones es Null, el resultado también será Null.
Equivalencia lógica (Eqv). Establece una equivalencia lógica de dos expresiones, es decir, que el resultado se dará cuando las dos expresiones sean equivalentes.
El hierro es un metal = True.
El hierro es duro = True.
El hierro es un metal Eqv El hierro es duro = True.
Hay 4 posibles resultados aplicando este operador a dos expresiones:
Si la Expresión 1 = True Eqv Expresión 2 = True el resultado es True.
Si la Expresión 1 = True Eqv Expresión 2 = False el resultado es False.
Si la Expresión 1 = False Eqv Expresión 2 = True el resultado es False.
Si la Expresión 1 = False Eqv Expresión 2 = False el resultado es True.
En resumen, solamente si las dos expresiones son equivalentes (iguales), el resultado es True. Si cualquiera de las expresiones es Null, el resultado también será Null.
Como puedes ver, hay una gran variedad de operadores, y por supuesto, se pueden combinar entre ellos. Cuando se escriben expresiones lógicas complejas es recomendable usar los paréntesis para cada sub expresión participante, y no olvides tener siempre en cuenta el orden de evaluación de los operadores. Es relativamente fácil equivocarse al escribir expresiones complicadas, y es buena idea probar siempre lo escrito con cuantas variaciones sea posible para asegurarse de que no se producen resultados inesperados.
Además de en el código de programas, los operadores lógicos se utilizan mucho en las consultas a bases de datos. El lenguaje SQL permite escribir consultas sumamente complejas utilizando estos operadores. Por ejemplo, las siguiente consulta muestra los registros de una DB de noticias sobre un tema concreto. Se requiere que las noticias se muestren como máximo durante un mes y un dia después de haberse incluido en la DB. Durante el mes de agosto, por vacaciones del personal, el tiempo no debe contar, por lo que las noticias incluidas el 31 de julio deben expirar el 1 de octubre en lugar del 31 de agosto.
SELECT
...
...
FROM
...
...
WHERE (
(DatePart(Month, Date()) NOT IN(8,9) )
AND (DateAdd(Day, 2, DateAdd(Month, 1, Fecha_alta)) > Date() )
AND (tema = 'Deportes')
)
OR
(
(DatePart(Month, Date()) IN(8,9) )
AND (DateAdd(Day, 2, DateAdd(Month, 2, Fecha_alta)) > Date() )
AND (tema = 'Deportes')
)
Objeto_A = Un_Objeto
Objeto_B = Un_objeto
Objeto_C = Otro_objeto
Objeto_A Is Objeto_B = True
Objeto_A Is Objeto_C = False