Operatorprioriteit in Visual Basic
Wanneer er verschillende bewerkingen plaatsvinden in een expressie, wordt elk onderdeel geëvalueerd en omgezet in een vooraf bepaalde volgorde die operatorprioriteit wordt genoemd.
Prioriteitsregels
Wanneer expressies operators uit meer dan één categorie bevatten, worden ze geëvalueerd volgens de volgende regels:
De rekenkundige en samenvoegingsoperatoren hebben de volgorde van prioriteit die in de volgende sectie wordt beschreven en hebben allemaal een hogere prioriteit dan de vergelijkings-, logische en bitsgewijze operatoren.
Alle vergelijkingsoperatoren hebben gelijke prioriteit en hebben allemaal een hogere prioriteit dan de logische en bitsgewijze operatoren, maar lagere prioriteit dan de rekenkundige operatoren en samenvoegingsoperatoren.
De logische en bitsgewijze operatoren hebben de volgorde van prioriteit die wordt beschreven in de volgende sectie en hebben allemaal een lagere prioriteit dan de rekenkundige operatoren, samenvoeging en vergelijkingsoperatoren.
Operators met gelijke prioriteit worden van links naar rechts geëvalueerd in de volgorde waarin ze worden weergegeven in de expressie.
Prioriteitsvolgorde
Operators worden geëvalueerd in de volgende volgorde van prioriteit:
Wacht op operator
Wachten
Rekenkundige en samenvoegingsoperatoren
Exponentiatie (^
)
Unaire identiteit en negatie (+
, –
)
Vermenigvuldigen en delen van drijvende komma (*
, /
)
Deling van gehele getallen (\
)
Modulaire rekenkundige (Mod
)
Optellen en aftrekken (+
, –
)
Tekenreekssamenvoeging (&
)
Rekenkundige bitverschuiving (<<
, >>
)
Vergelijkingsoperators
Alle vergelijkingsoperatoren (=
, <>
, <
, <=
, >
, >=
, Is
, IsNot
, ... Like
TypeOf
Is
)
Logische en bitsgewijze operators
Negatie (Not
)
Combinatie (And
, AndAlso
)
Inclusieve disjunction (Or
, OrElse
)
Exclusieve disjunction (Xor
)
Opmerkingen
De =
operator is alleen de gelijkheidsvergelijkingsoperator, niet de toewijzingsoperator.
De operator voor tekenreekssamenvoeging (&
) is geen rekenkundige operator, maar heeft voorrang op de rekenkundige operatoren.
De Is
operators en IsNot
operators zijn operatoren voor vergelijking van objectverwijzingen. Ze vergelijken de waarden van twee objecten niet; ze controleren alleen of twee objectvariabelen naar hetzelfde objectexemplaren verwijzen.
Associativiteit
Wanneer operators van gelijke prioriteit samen worden weergegeven in een expressie, bijvoorbeeld vermenigvuldigen en delen, evalueert de compiler elke bewerking wanneer deze van links naar rechts wordt tegengekomen. In het volgende voorbeeld ziet u dit.
Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)
De eerste expressie evalueert de divisie 96 / 8 (wat resulteert in 12) en vervolgens de divisie 12 / 4, wat resulteert in drie. Omdat de compiler de bewerkingen n1
van links naar rechts evalueert, is de evaluatie hetzelfde wanneer die volgorde expliciet voor wordt aangegeven n2
. Beide n1
en n2
hebben een resultaat van drie. Heeft daarentegen n3
een resultaat van 48, omdat de haakjes ervoor zorgen dat de compiler eerst 8/4 evalueert.
Vanwege dit gedrag worden operators geassocieerd gelaten in Visual Basic.
Voorrang en associativiteit overschrijven
U kunt haakjes gebruiken om af te dwingen dat bepaalde delen van een expressie vóór anderen worden geëvalueerd. Dit kan zowel de volgorde van prioriteit als de linkse associativiteit overschrijven. Visual Basic voert altijd bewerkingen uit die tussen haakjes staan voor die buiten. Binnen haakjes behoudt het echter gewone prioriteit en associativiteit, tenzij u haakjes tussen haakjes gebruikt. In het volgende voorbeeld ziet u dit.
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.