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 tutte una precedenza maggiore rispetto agli operatori di confronto, logici e bit per bit.

  • Tutti gli operatori di confronto hanno la stessa precedenza e tutti hanno una precedenza maggiore rispetto agli operatori logici e bit per bit, ma la 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 hanno tutte 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

Attendono

Operatori aritmetici e di concatenazione

Exponentiation (^)

Identità e negazione unaria (+, )

Moltiplicazione e divisione a virgola mobile (*, /)

Divisione integer (\)

Aritmetica modulare (Mod)

Addizione e sottrazione (+, )

Concatenazione di stringhe (&)

Spostamento dei bit aritmetici (<<, >>)

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 inclusiva (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 Is operatori e IsNot sono operatori di confronto dei riferimenti a oggetti. Non confrontano i valori di due oggetti; controllano solo per determinare se due variabili oggetto fanno riferimento alla stessa istanza dell'oggetto.

Associatività

Quando gli 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 la rileva da sinistra a destra. Questa condizione è illustrata 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 risulta in tre. Poiché il compilatore valuta le operazioni da n1 sinistra a destra, la valutazione è la stessa quando tale ordine viene indicato in modo esplicito per n2. Sia che n1n2 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 in Visual Basic.

Override della precedenza e dell'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à sinistra. Visual Basic esegue sempre operazioni racchiuse tra parentesi prima di quelle esterne. Tuttavia, all'interno delle parentesi, mantiene la precedenza e l'associatività normali, a meno che non si usino parentesi tra parentesi. Questa condizione è illustrata 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