Precedenza tra gli operatori in Visual Basic

Quando si verificano più operazioni in un'espressione, ogni parte viene valutata e risolta in un ordine predeterminato denominato precedenza dell'operatore.

Regole di precedenza

Quando le espressioni contengono operatori di più categorie, vengono valutate in base alle regole seguenti:

  • Gli operatori aritmetici e di concatenazione hanno l'ordine di precedenza descritto nella sezione seguente e hanno una precedenza maggiore rispetto agli operatori di confronto, logici e bit per bit.

  • Tutti gli operatori di confronto hanno una precedenza uguale e tutti hanno una precedenza maggiore rispetto agli operatori logici e bit per bit, ma una precedenza inferiore rispetto agli operatori aritmetici e di concatenazione.

  • Gli operatori logici e bit per bit hanno l'ordine di precedenza descritto nella sezione seguente e tutti hanno una precedenza inferiore rispetto agli operatori aritmetici, di concatenazione e di confronto.

  • Gli operatori con uguale precedenza vengono valutati da sinistra a destra nell'ordine in cui vengono visualizzati nell'espressione.

Ordine di precedenza

Gli operatori vengono valutati nell'ordine di precedenza seguente:

Operatore Await

Await

Operatori aritmetici e di concatenazioni

Elevamento a potenza (^)

Identità e negazione unarie (+, )

Moltiplicazione e divisione a virgola mobile (*, /)

Divisione di interi (\)

Aritmetico modulare (Mod)

Aggiunta e sottrazione (+, )

Concatenazione di stringhe (&)

Spostamento di bit aritmetico (<<, >>)

Operatori di confronto

Tutti gli operatori di confronto (=, <>, <, <=, >, >=, Is, IsNot, Like, TypeOf...Is)

Operatori logici e bit per bit

Negazione (Not)

Congiunzione (And, AndAlso)

Disgiunzione esclusiva (Or, OrElse)

Disgiunzione esclusiva (Xor)

Commenti

L'operatore = è solo l'operatore di confronto di uguaglianza, non l'operatore di assegnazione.

L'operatore di concatenazione di stringhe (&) non è un operatore aritmetico, ma in precedenza viene raggruppato con gli operatori aritmetici.

Gli operatori Is e IsNot sono operatori di confronto dei riferimenti a oggetti. Non confrontano i valori di due oggetti; effettuano un controllo solo per determinare se due variabili oggetto fanno riferimento alla stessa istanza dell'oggetto.

Associatività

Quando operatori di uguale precedenza vengono visualizzati insieme in un'espressione, ad esempio la moltiplicazione e la divisione, il compilatore valuta ogni operazione man mano che le rileva da sinistra a destra. Ciò è illustrato nell'esempio seguente.

Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)

La prima espressione valuta la divisione 96 / 8 (che restituisce 12) e quindi la divisione 12 / 4, che restituisce tre. Poiché il compilatore valuta le operazioni per n1 da sinistra a destra, la valutazione è la stessa quando tale ordine viene indicato in modo esplicito per n2. Sia n1 che n2 hanno un risultato di tre. Al contrario, n3 ha un risultato di 48, perché le parentesi forzano il compilatore a valutare prima 8 / 4.

A causa di questo comportamento, gli operatori vengono considerati associativi a sinistra in Visual Basic.

Override di precedenza e associatività

È possibile usare le parentesi per forzare la valutazione di alcune parti di un'espressione prima di altre. In questo modo è possibile eseguire l'override dell'ordine di precedenza e dell'associatività rimasta. Visual Basic esegue sempre operazioni racchiuse tra parentesi prima di quelle esterne. Tuttavia, tra parentesi, mantiene la precedenza e l'associatività normali, a meno che non si usino altre parentesi tra parentesi. Ciò è illustrato nell'esempio seguente.

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.

Vedi anche