Precedência do operador no Visual Basic

Quando ocorrem várias operações 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 precedência maior do que os operadores de comparação, lógicos e bit a bit.

  • Todos os operadores de comparação têm precedência igual e todos têm precedência maior que os operadores lógicos e bit a bit, mas precedência menor que os operadores aritméticos e de concatenação.

  • Os operadores lógicos e bit a bit 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, de concatenação e de 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

Await

Operadores aritméticos e de concatenação

Exponenciação (^)

Identidade unária e negação (+, )

Multiplicação e divisão de ponto flutuante (*, /)

Divisão de inteiros (\)

Aritmética modular (Mod)

Adição e subtração (+, )

Concatenação de cadeia de caracteres (&)

Deslocamento de bit aritmética (<<, >>)

Operadores de comparação

Todos os operadores de comparação (=, <>, <, <=, >, >=, Is, IsNot, Like, TypeOf...Is)

Operadores lógicos e bit a bit

Negação (Not)

Conjunção (And, AndAlso)

Disjunção inclusiva (Or, OrElse)

Disjunção exclusiva (Xor)

Comentários

O operador = é apenas o de comparação de igualdade, não o de atribuição.

O operador de concatenação de cadeia de caracteres (&) não é aritmético, mas, em precedência, é agrupado com os operadores aritméticos.

Os operadores Is 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 dele.

Capacidade de associação

Quando operadores de igual precedência aparecem juntos em uma expressão, como multiplicação e divisão, o compilador avalia cada operação conforme a encontra da esquerda para a direita. O exemplo a seguir ilustra essa situação.

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 para n1 da esquerda para a direita, a avaliação é a mesma quando essa ordem é indicada explicitamente para n2. 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 considerados associativos à esquerda no Visual Basic.

Como substituir Precedência 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 a ordem de precedência e a associatividade esquerda. O Visual Basic sempre executa operações que estão entre parênteses antes daquelas externas. No entanto, entre parênteses, ele mantém precedência e associatividade comuns, a menos que você use parênteses dentro dos parênteses. O exemplo a seguir ilustra essa situação.

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.

Confira também