Condividi tramite


Precedenza dell'operatore 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 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 tutti hanno la 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

Aspettare

Operatori aritmetici e concatenazioni

Exponentiation (^)

Identità e negazione unarie (+, )

Moltiplicazione e divisione a virgola mobile (*, /)

Divisione integer (\)

Aritmetica modulare (Mod)

Addizione e sottrazione (+, )

Concatenazione di stringhe (&)

Aritmetica bit shift (<<, >>)

Operatori di confronto

Tutti gli operatori di confronto (=, <>, <<=, >, >=, IsIsNot, , 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 mentre la rileva da sinistra a destra. Nell'esempio seguente viene illustrato questo.

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 produce 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. Entrambi n1 e 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 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, tra parentesi, mantiene la precedenza e l'associatività normali, a meno che non si usino parentesi tra parentesi. Nell'esempio seguente viene illustrato questo.

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.

Vedere anche