Precedência do operador no Visual Basic
Quando várias operações ocorrem em uma expressão, cada parte é avaliada e resolvida em uma ordem predeterminada chamada precedência do operador.
Regras de precedência
Quando as expressões contêm operadores de mais de uma categoria, elas são avaliadas de acordo com as seguintes regras:
Os operadores aritméticos e de concatenação têm a ordem de precedência descrita na seção a seguir, e todos têm maior precedência do que os operadores de comparação, lógicos e bitwise.
Todos os operadores de comparação têm igual precedência, e todos têm maior precedência do que os operadores lógicos e bitwise, mas menor precedência do que os operadores aritméticos e de concatenação.
Os operadores lógicos e bitwise têm a ordem de precedência descrita na seção a seguir, e todos têm precedência menor do que os operadores aritméticos, concatenação e comparação.
Operadores com igual precedência são avaliados da esquerda para a direita na ordem em que aparecem na expressão.
Ordem de precedência
Os operadores são avaliados na seguinte ordem de precedência:
Operador Await
Aguarde
Operadores de Aritmética e Concatenação
Exponenciação (^
)
Identidade unária e negação (+
, –
)
Multiplicação e divisão de vírgula flutuante (*
, /
)
Divisão inteira (\
)
Aritmética modular (Mod
)
Adição e subtração (+
, –
)
Concatenação de cadeias de caracteres (&
)
Desvio aritmético de bits (<<
, >>
)
Operadores de Comparação
Todos os operadores de comparação (=
, <>
, <
, <=
, >
, >=
, Is
, IsNot
, Like
, TypeOf
...Is
)
Operadores lógicos e bitwise
Negação (Not
)
Conjunção (And
, AndAlso
)
Disjunção inclusiva (Or
, OrElse
)
Disjunção exclusiva (Xor
)
Comentários
O =
operador é apenas o operador de comparação de igualdade, não o operador de atribuição.
O operador de concatenação de cadeia (&
) não é um operador aritmético, mas em precedência é agrupado com os operadores aritméticos.
Os Is
operadores e IsNot
são operadores de comparação de referência de objeto. Eles não comparam os valores de dois objetos; eles verificam apenas para determinar se duas variáveis de objeto se referem à mesma instância de objeto.
Associatividade
Quando operadores de igual precedência aparecem juntos em uma expressão, por exemplo, multiplicação e divisão, o compilador avalia cada operação à medida que a encontra da esquerda para a direita. O exemplo a seguir ilustra isso.
Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)
A primeira expressão avalia a divisão 96/8 (que resulta em 12) e depois a divisão 12/4, que resulta em três. Como o compilador avalia as operações da n1
esquerda para a direita, a avaliação é a mesma quando essa ordem é explicitamente indicada para n2
. Ambos n1
e n2
têm um resultado de três. Por outro lado, n3
tem um resultado de 48, porque os parênteses forçam o compilador a avaliar 8 / 4 primeiro.
Devido a esse comportamento, os operadores são ditos para ser deixado associativo no Visual Basic.
Precedência Primordial e Associatividade
Você pode usar parênteses para forçar algumas partes de uma expressão a serem avaliadas antes de outras. Isso pode substituir tanto a ordem de precedência quanto a associatividade à esquerda. Visual Basic sempre executa operações que são colocadas entre parênteses antes daqueles fora. No entanto, entre parênteses, mantém a precedência e a associatividade ordinárias, a menos que você use parênteses entre parênteses. O exemplo a seguir ilustra isso.
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.