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.