Prioridad de operadores en Visual Basic

Cuando se producen varias operaciones en una expresión, cada parte se evalúa y resuelve en un orden predeterminado denominado prioridad de operadores.

Reglas de prioridad

Cuando las expresiones contienen operadores de más de una categoría, se evalúan según las reglas siguientes:

  • Los operadores aritméticos y de concatenación tienen el orden de prioridad descrito en la sección siguiente y todos tienen mayor prioridad que los operadores de comparación, lógicos y bit a bit.

  • Todos los operadores de comparación tienen la misma prioridad, que es mayor a la de los operadores lógicos y bit a bit, pero menor que los operadores aritméticos y de concatenación.

  • Los operadores lógicos y de bita a bit tienen el orden de prioridad descrito en la sección siguiente y su prioridad es que la de los operadores aritméticos, de concatenación y de comparación.

  • Los operadores que tengan la misma prioridad se evalúan de izquierda a derecha en el orden en que aparecen en la expresión.

Orden de prioridad

Los operadores se evalúan en el siguiente orden de prioridad:

Operador Await

Await

Operadores aritméticos y de concatenación

Exponenciación (^)

Identidad unaria y negación (+, )

Multiplicación y división de punto flotante (*, /)

División de enteros (\)

Aritmética modular (Mod)

Suma y resta (+, )

Concatenación de cadenas (&)

Desplazamiento de bits aritmético (<<, >>)

Operadores de comparación

Todos los operadores de comparación (=, <>, <, <=, >, >=, Is, IsNot, Like, TypeOf...Is)

Operadores lógicos y bit a bit

Negación (Not)

Conjunción (And, AndAlso)

Disyunción inclusiva (Or, OrElse)

Disyunción exclusiva (Xor)

Comentarios

= es solo el operador de comparación de igualdad, no el operador de asignación.

El operador de concatenación de cadenas (&) no es un operador aritmético, pero a la hora de determinar la prioridad se agrupa con los operadores aritméticos.

Is y IsNot son operadores de comparación de referencia de objetos. No comparan los valores de dos objetos; solo realizan las comprobaciones necesarias para determinar si dos variables de objeto hacen referencia a la misma instancia de objeto.

Asociatividad

Si operadores con la misma prioridad aparecen juntos en una expresión, por ejemplo, multiplicación y división, el compilador evalúa cada operación de izquierda a derecha. Esto se ilustra en el siguiente ejemplo:

Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)

La primera expresión evalúa la división 96/8 (cuya resultado 12) y, después, la división 12/4, cuyo resultado es 3. Dado que el compilador evalúa las operaciones de n1 de izquierda a derecha, la evaluación es la misma cuando ese orden se indica explícitamente para n2. El resultado tanto de n1 como de n2 es tres. Por el contrario, el resultado de n3 es 48, porque los paréntesis obligan al compilador a evaluar primero 8/4.

Debido a este comportamiento, se dice que los operadores son asociativos hacia la izquierda en Visual Basic.

Anulación de la prioridad y asociatividad

Para que algunas partes de una expresión se evalúen antes que otras se deben usar paréntesis, ya que con ellos se anula el orden de prioridad y la asociatividad hacia la izquierda. Visual Basic siempre realiza operaciones entre paréntesis antes que las de fuera. Sin embargo, dentro de los paréntesis se mantienen la precedencia y asociatividad ordinarias, salvo que usen paréntesis dentro de paréntesis. Esto se ilustra en el siguiente ejemplo:

Dim a, b, c, d, e, f, g As Double
a = 8.0
b = 3.0
c = 4.0
d = 2.0
e = 1.0
f = a - b + c / d * e
' The preceding line sets f to 7.0. Because of natural operator
' precedence and associativity, it is exactly equivalent to the
' following line.
f = (a - b) + ((c / d) * e)
' The following line overrides the natural operator precedence
' and left associativity.
g = (a - (b + c)) / (d * e)
' The preceding line sets g to 0.5.

Consulte también