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.