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 (=, <>, <<=, >, >=, 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.