Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 (=
, <>
, <
<=
, >
, >=
, 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 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.