Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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. La prioridad más alta significa que estos operadores se evalúan primero.
Todos los operadores de comparación tienen la misma precedencia y todos tienen mayor prioridad que los operadores lógicos y bit a bit, pero menos prioridad que los operadores aritméticos y 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, concatenados 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 siguiente orden de prioridad. Los operadores enumerados primero tienen mayor prioridad y se evalúan antes de que los operadores se muestren más adelante:
1. Operador await
Esperar
2. Operadores aritméticos y 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 (<<, >>)
3. Operadores de comparación
Todos los operadores de comparación (=, <>, <, <=, >>=IsIsNot, , , Like... ) TypeOfIs
4. Operadores lógicos y bit a bit
Negación (Not)
Conjunción (And, AndAlso)
Disjunción inclusiva (Or, OrElse)
Disjunció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 precedencia se agrupa con los operadores aritméticos.
Los Is operadores y IsNot son operadores de comparación de referencia de objetos. No comparan los valores de dos objetos; solo comprueban si dos variables de objeto hacen referencia a la misma instancia de objeto.
Capacidad de asociación
Cuando los operadores de la misma precedencia 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, a continuación, la división 12 / 4, lo que da como resultado tres. 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. Tanto n1 como n2 tienen un resultado de tres. Por el contrario, n3 tiene un resultado de 48, porque los paréntesis obligan al compilador a evaluar primero 8 /4.
Debido a este comportamiento, se dice que los operadores se dejan asociativos en Visual Basic.
Invalidación de precedencia y asociatividad
Puede usar paréntesis para forzar que algunas partes de una expresión se evalúen antes que otras. Esto puede invalidar tanto el orden de prioridad como la asociatividad izquierda. Visual Basic siempre realiza operaciones que se incluyen entre paréntesis antes de las que están fuera. Sin embargo, entre paréntesis, mantiene la precedencia normal y la asociatividad, a menos que use paréntesis entre 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. Division and multiplication (/, *) have higher
' precedence than addition and subtraction (+, -), so c / d * e
' is evaluated first, then the addition and subtraction from left to right.
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.