Prioridad de operador en Visual Basic

Cuando se producen varias operaciones en una expresión, cada parte se evalúa y resuelve en un orden predeterminado denominado precedencia del operador.

Reglas de precedencia

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 y todos tienen mayor prioridad que los operadores lógicos y bit a bit, pero menor que los operadores aritméticos y de concatenación.

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

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

Orden de precedencia

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

Await (Operador)

Esperan

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

El = operador 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 en & prioridad se agrupa con los operadores aritméticos.

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

asociatividad

Cuando los operadores de igual prioridad aparecen juntos en una expresión, por ejemplo, multiplicación y división, el compilador evalúa cada operación a medida que la encuentra 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 (que da como resultado 12) y, después, la división 12/4, que da como resultado tres. Dado que el compilador evalúa las operaciones de izquierda a derecha, la evaluación es la misma cuando ese orden se n1 indica explícitamente para n2 . Y n1 n2 tienen un resultado de tres. Por el contrario, tiene un resultado de 48, porque los paréntesis obligan al compilador a evaluar n3 primero 8/4.

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

Invalidar la precedencia y la asociatividad

Puede usar paréntesis para forzar que algunas partes de una expresión se evalúen antes que otras. Esto puede invalidar el orden de precedencia y la asociatividad izquierda. Visual Basic siempre realiza operaciones que se incluyen entre paréntesis antes que las externas. Sin embargo, entre paréntesis, mantiene la prioridad y la asociatividad normales, a menos que se usen paréntesis entre 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.

Consulta también