[Indice]


Visual Basic Script

Operadores

Sin tener en cuenta los operadores de concatenación (& y +) de los que ya se ha hablado en la sección cómo se escribe el ASP, en VBScript hay tres clases de operadores:

Prioridad de los operadores

Los operadores tienen unas prioridades preestablecidas, es decir, que si en una expresión hay que resolver varias operaciones, cada parte se evaluará y resolverá en un cierto orden. Si es necesario alterar ese orden, se puede recurrir a escribir las distintas partes de la expresión entre paréntesis, lo que provoca que se ejecuten antes que las partes que no esten entre paréntesis. No obstante, las operaciones escritas dentro de los paréntesis continuarán ejecutándose en el orden de prioridad de los distintos operadores.

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:

Aritméticos

Exponenciación (^). Elevar un número a la potencia del exponente: 3^2 = 9 . Si el número o el exponente es una expresión de valor Null, el resultado también da Null. El número puede ser negativo si el exponente es un entero.

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.

Lógicos

Estos operadores tienen unas aplicaciones un tanto especiales, ya que no funcionan como los aritméticos, conocidos por todos. Para comprender el funcionamiento de los operadores lógicos, primero hay que saber qué son los estados lógicos de una expresión. Y te preguntarás que es eso de "estados lógicos"... Esta es una cuestión un tanto filosófica, ya que el estado lógico de algo depende de respecto a qué establecemos ese estado, y por tanto no siempre será el mismo. Dependerá del entorno o contexto en el que se define y utiliza la expresión. En BVScript hay tres posibles estados lógicos: True (verdadero), False (falso) y Null (nulo, es decir que no se ha establecido estado alguno por la razón que sea)

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') 
          ) 

De comparación

Y por último, y aunque solo sea para ver los que hay y sus símbolos, he aquí los de comparación, ya que todos tienen el mismo orden de prioridad, por lo que se evalúan en el orden en que hayan sido escritos, de izquierda a derecha: Todos ellos sobradamente conocidos. Solamente Is requiere alguna explicación: es éste un operador de comparación de referencia de objeto. No compara objetos o sus valores; sólo comprueba si dos referencias a objetos se refieren al mismo objeto. Trabaja de forma similar a los operadores lógicos, aunque no lo es, devolviendo un estado True o False. Por ejemplo:

Objeto_A = Un_Objeto
Objeto_B = Un_objeto
Objeto_C = Otro_objeto

Objeto_A Is Objeto_B = True

Objeto_A Is Objeto_C = False


[Indice]