Operatorprioret i Visual Basic

När flera åtgärder inträffar i ett uttryck utvärderas och matchas varje del i en fördefinierad ordning som kallas operatorprioritet.

Prioritetsregler

När uttryck innehåller operatorer från mer än en kategori utvärderas de enligt följande regler:

  • Operatorerna aritmetik och sammanfogning har prioritetsordningen som beskrivs i följande avsnitt, och alla har större prioritet än jämförelseoperatorerna, logiska och bitvisa operatorerna.

  • Alla jämförelseoperatorer har samma prioritet och alla har högre prioritet än logiska operatorer och bitvis-operatorer, men lägre prioritet än operatorerna aritmetik och sammanfogning.

  • De logiska operatorerna och bitvisoperatorerna har prioritetsordningen som beskrivs i följande avsnitt och alla har lägre prioritet än operatorerna aritmetik, sammanfogning och jämförelse.

  • Operatorer med samma prioritet utvärderas från vänster till höger i den ordning de visas i uttrycket.

Prioritetsordning

Operatorer utvärderas i följande prioritetsordning:

Await-operator

Väntar

Aritmetiska operatorer och sammanlänkningsoperatorer

Exponentiation (^)

Unary identitet och negation (+, )

Multiplikation och flyttalsdivision (*, /)

Heltalsdivision (\)

Modulär aritmetik (Mod)

Addition och subtraktion (+, )

Strängsammanfogning (&)

Aritmetisk bitförskjutning (<<, >>)

Jämförelseoperatörer

Alla jämförelseoperatorer (=, <>, <, <=, >, >=, Is, IsNot, Like, TypeOf...Is)

Logiska operatorer och bitvis operatorer

Negation (Not)

Konjunktion (And, AndAlso)

Inkluderande disjunction (Or, OrElse)

Exklusiv disjunction (Xor)

Kommentarer

Operatorn = är bara likhetsjämförelseoperatorn, inte tilldelningsoperatorn.

Strängsammanfogningsoperatorn (&) är inte en aritmetikoperator, men i prioriteten grupperas den med de aritmetiska operatorerna.

Operatorerna Is och IsNot är jämförelseoperatorer för objektreferenser. De jämför inte värdena för två objekt. de kontrollerar bara om två objektvariabler refererar till samma objektinstans.

Associativitet

När operatorer med samma prioritet visas tillsammans i ett uttryck, till exempel multiplikation och division, utvärderar kompilatorn varje åtgärd när den stöter på den från vänster till höger. I följande exempel visas detta.

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

Det första uttrycket utvärderar division 96/8 (vilket resulterar i 12) och sedan division 12/4, vilket resulterar i tre. Eftersom kompilatorn utvärderar åtgärderna för n1 från vänster till höger är utvärderingen densamma när den ordningen uttryckligen anges för n2. Båda n1 och n2 har ett resultat av tre. Däremot n3 har resultatet 48, eftersom parenteserna tvingar kompilatorn att utvärdera 8/4 först.

På grund av det här beteendet sägs operatorerna vara associativa i Visual Basic.

Åsidosättande prioritet och associativitet

Du kan använda parenteser för att tvinga vissa delar av ett uttryck att utvärderas före andra. Detta kan åsidosätta både prioritetsordningen och den vänstra associativiteten. Visual Basic utför alltid åtgärder som omges av parenteser före de utanför. Inom parenteser har den dock vanlig prioritet och associativitet, såvida du inte använder parenteser inom parenteserna. I följande exempel visas detta.

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.

Se även