Buscador

OrElse

Este operador realiza una disyunción lógica de tipo cortocircuito entre dos expresiones. En este tipo de operación, en cuanto la primera expresión devuelva verdadero como resultado, el resto no será evaluado devolviendo verdadero como resultado final. La muestra los diferentes resultados obtenidos con el uso de este operador en función de los valores que tengan sus expresiones.
El Código fuente 89 muestra algunos ejemplos con este operador.



Dim Resultado As Boolean
Resultado = ("H" = "H") OrElse (720 < 150) ' devuelve: True
Resultado = (8 <> 8) OrElse (62 < 115) ' devuelve: True
Resultado = ("W" > "b") OrElse ("Q" = "R") ' devuelve: False

Código fuente 89

AndAlso

Este operador realiza una conjunción lógica de tipo cortocircuito entre dos expresiones. En este tipo de operación, en cuanto la primera expresión devuelva falso como resultado, el resto no será evaluado devolviendo falso como resultado final. La Tabla 14 muestra los diferentes resultados obtenidos con el uso de este operador en función de los valores que tengan sus expresiones
El Código fuente 88 muestra algunos ejemplos con este operador.


Dim Resultado As Boolean
Resultado = (58 > 20) AndAlso ("H" = "H") ' devuelve: True
Resultado = ("H" = "H") AndAlso (720 < 150) ' devuelve: False

Resultado = (8 <> 8) AndAlso (62 < 115) ' devuelve: False

Código fuente 88

Xor - II

A nivel de bit, Xor realiza las operaciones mostradas en la Tabla 13.
Tabla 13. Tabla de valores a nivel de bit del operador Or.
El Código fuente 87 muestra algunos ejemplos a nivel de bit con este operador.


Dim Resultado As Integer
Resultado = 15 Xor 8 ' devuelve: 7
Resultado = 6 Xor 45 ' devuelve: 43
Código fuente 87

Xor - I

A nivel lógico, este operador realiza una exclusión entre dos expresiones. La Tabla 12 muestra los diferentes resultados obtenidos con el uso de este operador en función de los valores que tengan sus expresiones.
El Código fuente 86 muestra algunos ejemplos a nivel lógico con este operador


Dim Resultado As Boolean
Resultado = (58 > 20) Xor ("H" = "H") ' devuelve: False
Resultado = ("H" = "H") Xor (720 < 150) ' devuelve: True
Resultado = (8 <> 8) Xor (62 < 115) ' devuelve: True
Resultado = ("W" > "b") Xor ("Q" = "R") ' devuelve: False
Código fuente 86

Or - II

A nivel de bit, Or realiza las operaciones mostradas en la Tabla 11.
Tabla 11. Tabla de valores a nivel de bit del operador Or.
El Código fuente 85 muestra algunos ejemplos a nivel de bit con este operador.


Dim Resultado As Integer
Resultado = 15 Or 8 ' devuelve: 15
Resultado = 6 Or 45 ' devuelve: 47
Código fuente 85

Or - I

A nivel lógico, este operador realiza una disyunción entre dos expresiones. La Tabla 10 muestra los diferentes resultados obtenidos con el uso de este operador en función de los valores que tengan sus expresiones.
El Código fuente 84 muestra algunos ejemplos a nivel lógico con este operador.


Dim Resultado As Boolean
Resultado = (58 > 20) Or ("H" = "H") ' devuelve: True
Resultado = ("H" = "H") Or (720 < 150) ' devuelve: True
Resultado = (8 <> 8) Or (62 < 115) ' devuelve: True
Resultado = ("W" > "b") Or ("Q" = "R") ' devuelve: False
Código fuente 84

Not - II

A nivel de bit, Not realiza las operaciones mostradas en la Tabla 9.
El Código fuente 83 muestra algunos ejemplos a nivel de bit con este operador.


Dim Resultado As Integer
Resultado = Not 16 ' devuelve: -17
Resultado = Not 4 ' devuelve: -5
Código fuente 83

Not - I

A nivel lógico, este operador realiza una negación entre dos expresiones. Su formato es ligeramente distinto del resto de operadores lógicos, como vemos en el Código fuente 81.


Resultado = Not Expresión
Código fuente 81
La Tabla 8 muestra los resultados obtenidos con el uso de este operador en función de su expresión.
Tabla 8. Tabla de valores lógicos del operador Not.
El Código fuente 82 muestra algunos ejemplos a nivel lógico con este operador.

Dim Operacion As Boolean
Dim Resultado As Boolean
Operacion = 100 > 60
Resultado = Not Operacion ' devuelve: False
Resultado = Not (28 > 50) ' devuelve: True
Código fuente 82

Uso de paréntesis para mejorar la legibilidad de expresiones

Los ejemplos a nivel lógico del apartado anterior, si bien se ejecutan correctamente, pueden ser un tanto confusos a la hora de leer, ya que al tratarse de una operación lógica, cada operando es a su vez una expresión. Para facilitar la lectura y compresión en expresiones sobre todo lógicas, podemos encerrar cada operando-expresión entre paréntesis. Ver Código fuente 80.

Dim Resultado As Boolean
Resultado = (58 > 20) And ("H" = "H") ' devuelve: True
Resultado = ("H" = "H") And (720 < 150) ' devuelve: False
Resultado = (8 <> 8) And (62 < 115) ' devuelve: False
Resultado = ("W" > "b") And ("Q" = "R") ' devuelve: False
Código fuente 80

Como puede comprobar el lector al ejecutar, el resultado es el mismo que si no utilizamos paréntesis, pero la claridad al leer estas líneas de código es mucho mayor.

And - II

A nivel de bit, And realiza las operaciones mostradas en la Tabla 7.
Tabla 7. Tabla de valores a nivel de bit del operador And.
El Código fuente 79 muestra algunos ejemplos a nivel de bit con este operador.


Dim Resultado As Integer
Resultado = 15 And 8 ' devuelve: 8
Resultado = 6 And 45 ' devuelve: 4
Código fuente 79

And - I

A nivel lógico, este operador realiza una conjunción entre dos expresiones. La Tabla 6 muestra los diferentes resultados obtenidos con el uso de este operador en función de los valores que tengan sus expresiones.
Tabla 6. Tabla de valores lógicos del operador And.

El Código fuente 78 muestra algunos ejemplos a nivel lógico con este operador.

Dim Resultado As Boolean
Resultado = 58 > 20 And "H" = "H" ' devuelve: True
Resultado = "H" = "H" And 720 < 150 ' devuelve: False
Resultado = 8 <> 8 And 62 < 115 ' devuelve: False
Resultado = "W" > "b" And "Q" = "R" ' devuelve: False
Código fuente 78

Operadores lógicos y a nivel de bit

Los operadores lógicos devuelven un valor de tipo Boolean (True o False), en base a una condición establecida entre los operandos de la expresión. En expresiones que impliquen el uso de operadores lógicos, es habitual que los operandos sean a su vez expresiones, como veremos en los próximos ejemplos con este tipo de operadores. El Código fuente 77 muestra el formato de uso para estos operadores.

Resultado = ExpresiónA OperadorLogico ExpresiónB
Código fuente 77

Cuando los operandos que forman parte de la expresión son numéricos, la evaluación de la expresión
se realiza a nivel de bit, es decir, comparando los bits de las posiciones equivalentes de ambos
números y obteniendo igualmente, un valor numérico como resultado.

Comparación de objetos. El operador Is - II

Como hemos podido comprobar, al comparar las variables del anterior fuente con Is, el resultado es False, ya que ambos objetos son instancias diferentes, aunque pertenezcan a la misma clase: Form. La creación de formularios será abordada en un tema posterior. Si por el contrario, creamos una única instancia de un objeto y la asignamos a las dos variables, el resultado será muy diferente. En este caso el operador Is devolverá True ya que ambas variables contienen el mismo objeto. Ver Código fuente 76.

Public Sub Main()
' declarar dos variables que
' contendran objetos de la clase Form
Dim VentanaUno As Form
Dim VentanaDos As Form
Dim Resultado As Boolean
' crear una única instancia de la clase Form,
' el objeto resultante se asigna a una variable
VentanaUno = New Form()
' después el mismo objeto que ya está
' en una variable se asigna a la otra variable
VentanaDos = VentanaUno
' ambas variables contienen una referencia
' al mismo objeto, por lo que la expresión
' de comparación Is devuelve True
Resultado = VentanaUno Is VentanaDos
End Sub
Código fuente 76

Comparación de objetos. El operador Is - I

El operador Is permite comparar si dos variables que contienen objetos apuntan o no a la misma referencia o instancia del objeto. Para conceptos básicos sobre objetos, consulte el lector los temas dedicados a la programación orientada a objetos en este mismo texto. El Código fuente 74 muestra el formato de uso para este operador.

Resultado = ObjetoA Is ObjetoB
Código fuente 74

Para probar este operador podemos crear una aplicación de tipo Windows y añadir un módulo en el que escribiríamos un procedimiento Main( ). Después de configurar el proyecto para que se inicie por este procedimiento, escribiremos las líneas que se muestran en el Código fuente 75.


Public Sub Main()
' declarar dos variables que
' contendran objetos de la clase Form
Dim VentanaUno As Form
Dim VentanaDos As Form
Dim Resultado As Boolean
' crear dos instancias de la clase Form
' asignando cada uno de los objetos
' a las variables
VentanaUno = New Form()
VentanaDos = New Form()
' la expresión de comparación con Is devuelve
' False ya que las variables tienen referencias
' a objetos diferentes, aunque sean de la misma clase
Resultado = VentanaUno Is VentanaDos
End Sub
Código fuente 75

Comparación de cadenas en base a un patrón. El operador Like - I

El operador Like permite realizar una comparación entre dos cadenas, en base a un patrón establecido en una de ellas. El formato de uso se muestra en el Código fuente 72.

Resultado = Cadena Like Patrón
Código fuente 72
• Resultado. Valor lógico con el resultado de la comparación. Verdadero indica que hay una coincidencia de Cadena con Patrón. Falso indica que no se ha producido coincidencia de Cadena con Patrón. 
• Cadena. Cadena de caracteres que se compara con el patrón de coincidencia. 
• Patrón. Cadena de caracteres en donde se especifican los caracteres especiales que sirven de patrón de coincidencia respecto al valor de Cadena. La Tabla 5 muestra los caracteres y convenciones de uso establecidas por el lenguaje para el uso de patrones de comparación.
Tabla 5. Caracteres patrón del operador Like.

La función Chr( )

Si nos encontramos en la situación inversa a la descrita en el apartado anterior, es decir, tenemos el código de un carácter y queremos saber a cuál corresponde, la función Chr( ) recibe un número como parámetro y devuelve el carácter al que pertenece como un dato de tipo Char, aunque también podemos asignar el resultado a una variable String. Veamos unos ejemplos en el Código fuente 71.

Dim MiCaracter As Char
Dim MiCadena As String
MiCaracter = Chr(65) ' devuelve: "A"
MiCaracter = Chr(70) ' devuelve: "F"
MiCadena = Chr(77) ' devuelve: "M"
MiCadena = Chr(102) ' devuelve: "f"
Código fuente 71

La función Asc( )

Cuando realizamos comparaciones entre cadenas, basadas en los valores binarios de los caracteres, es útil en ocasiones conocer el código de dichos caracteres. 
Para averiguar cuál es el código correspondiente a un determinado carácter, el lenguaje nos proporciona la función Asc( ). Esta función recibe como parámetro una cadena, y devuelve un valor numérico de tipo Integer, con el código correspondiente al primer carácter de la cadena. El Código fuente 70 nos muestra algunos ejemplos.

Dim CodigoCar As Integer
CodigoCar = Asc("A") ' devuelve: 65
CodigoCar = Asc("a") ' devuelve: 97
CodigoCar = Asc("M") ' devuelve: 77
CodigoCar = Asc("F") ' devuelve: 70
CodigoCar = Asc("f") ' devuelve: 102
CodigoCar = Asc("hola") ' devuelve: 104
Código fuente 70

Comparación de cadenas - III

Si a continuación, cambiamos la configuración de Option Compare a Text y realizamos las mismas comparaciones, en algunos casos obtendremos resultados diferentes. Ver Código fuente 69.

Option Compare Text
Module Module1
Sub Main()
Dim Resultado As Boolean
Resultado = "A" = "a" ' devuelve: True
Resultado = "M" < "Z" ' devuelve: True
Resultado = "M" > "m" ' devuelve: False
Resultado = "F" <> "f" ' devuelve: False
End Sub
End Module
Código fuente 69
En esta ocasión “A” y “a” si son iguales, debido a que se comparan sus valores como texto y no como los códigos internos utilizados para representar los caracteres. De igual forma, se devuelve falso en la expresión que comprueba si “F” y “f” son distintos, ya que bajo esta configuración, ambos caracteres se consideran iguales.

Comparación de cadenas - II

Si configuramos a nivel de fichero de código, escribiremos esta instrucción en la cabecera del fichero con el modificador oportuno.
Consulte el lector el apartado sobre declaración obligatoria de variables, para un mayor detalle sobre el acceso a esta ventana de propiedades del proyecto. En el Código fuente 68 tenemos un ejemplo de comparación de cadenas utilizando Option Compare Binary.


Option Compare Binary
Module Module1
Sub Main()
Dim Resultado As Boolean
Resultado = "A" = "a" ' devuelve: False
Resultado = "M" < "Z" ' devuelve: True
Resultado = "M" > "m" ' devuelve: False
Resultado = "F" <> "f" ' devuelve: True
End Sub
End Module
Código fuente 68
El motivo de que la comparación “A” con “a” devuelva falso, o de que “M” no sea mayor que “m” se debe a que lo que se comparan son los valores binarios, o códigos que sirven para representar a cada carácter. Por ejemplo, el código de “M” es 77, mientras que el de “m” es 109, por lo que al ser este último mayor, la comparación realizada en el fuente de ejemplo devuelve False.

Comparación de cadenas - I

Podemos utilizar los operadores de comparación antes descritos para comparar también cadenas de caracteres. La instrucción Option Compare, junto a sus modificadores Binary/Text, nos permite definir el modo en que se realizarán las comparaciones entre expresiones que contengan cadenas.
• Option Compare Binary. Las comparaciones se realizan en base a los valores binarios internos de los caracteres. Esta es la opción por defecto.
• Option Compare Text. Las comparaciones se realizan en base a los valores textuales de los caracteres. Podemos configurar Option Compare a nivel de proyecto y de fichero de código.
En el caso de configurar a nivel de proyecto, deberemos abrir la ventana de propiedades del proyecto, y en su apartado Generar, establecer el valor correspondiente en la lista desplegable. Ver Figura 65.
Figura 65. Configuración de Option Compare.

Operadores de comparación

Estos operadores permiten comprobar el nivel de igualdad o diferencia existente entre los operandos de una expresión. El resultado obtenido será un valor lógico, True (Verdadero) o False (Falso). La Tabla 4 muestra la lista de los operadores disponibles de este tipo.
Tabla 4. Operadores de comparación.
El Código fuente 67 nos muestra algunas expresiones de comparación utilizando números.


Dim Resultado As Boolean
Resultado = 10 < 45 ' devuelve: True
Resultado = 7 <= 7 ' devuelve: True
Resultado = 25 > 50 ' devuelve: False
Resultado = 80 >= 100 ' devuelve: False
Resultado = 120 = 220 ' devuelve: False
Resultado = 5 <> 58 ' devuelve: True
Código fuente 67

Concatenación: &=

Para concatenar dos cadenas, podemos emplear la sintaxis normal o abreviada. Ver Código fuente 66.

Dim PrimeraCad As String
Dim SegundaCad As String
PrimeraCad = "Aquí va "
SegundaCad = "una prueba"
' sintaxis normal
PrimeraCad = PrimeraCad & SegundaCad ' devuelve: "Aquí va una prueba"
' sintaxis abreviada
PrimeraCad &= SegundaCad ' devuelve: "Aquí va una prueba"
Código fuente 66

Resta: -=

Podemos restar números utilizando la sintaxis normal o abreviada. Ver Código fuente 65.

Dim Valor As Integer
Dim Resultado As Double
Valor = 69
Resultado = 200
' sintaxis normal
Resultado = Resultado - Valor ' devuelve: 131
' sintaxis abreviada
Resultado -= Valor ' devuelve: 131
Código fuente 65

Suma: +=

Podemos sumar números, o concatenar cadenas utilizando la sintaxis normal o abreviada. Ver Código fuente 64.

Dim Valor As Integer
Dim Resultado As Double
Dim CadenaA As String
Dim CadenaB As String
' con valores numéricos
Valor = 69
Resultado = 200
' sintaxis normal
Resultado = Resultado + Valor ' devuelve: 269
' sintaxis abreviada
Resultado += Valor ' devuelve: 269
' con cadenas de caracteres
CadenaA = " varios numeros"
CadenaB = "589"
CadenaB += CadenaA ' devuelve: "589 varios numeros"
Código fuente 64

División entera: \=

Para dividir dos números, con un resultado entero, podemos utilizar la sintaxis normal o abreviada. Ver Código fuente 63.

Dim Valor As Integer
Dim Resultado As Double
Valor = 5
Resultado = 182
' sintaxis normal
Resultado = Resultado \ Valor ' devuelve: 36
' sintaxis abreviada
Resultado \= Valor ' devuelve: 36
Código fuente 63

División real: /=

Para dividir dos números, y obtener un resultado con precisión decimal, podemos utilizar la sintaxis normal o abreviada. Ver Código fuente 62.

Dim Valor As Integer
Dim Resultado As Double
Valor = 5
Resultado = 182
' sintaxis normal
Resultado = Resultado / Valor ' devuelve: 36.4
' sintaxis abreviada
Resultado /= Valor ' devuelve: 36.4
Código fuente 62

Multiplicación: *=

Para multiplicar dos números podemos utilizar la sintaxis normal o abreviada. Ver Código fuente 61.

Dim Valor As Integer
Dim Resultado As Double
Valor = 7
Resultado = 12
' sintaxis normal
Resultado = Resultado * Valor ' devuelve: 84
' sintaxis abreviada
Resultado *= Valor ' devuelve: 84
Código fuente 61

Potencia: ^=

Para elevar un número a una potencia podemos utilizar la sintaxis normal o abreviada. Ver Código fuente 60.


Dim Valor As Integer
Dim Resultado As Double
Valor = 3
Resultado = 2
' sintaxis normal
Resultado = Resultado ^ Valor ' devuelve: 8
' sintaxis abreviada
Resultado ^= Valor ' devuelve: 8
Código fuente 60