Operatorrangfolge in Visual Basic
Wenn mehrere Vorgänge in einem Ausdruck auftreten, wird jeder Teil ausgewertet und in einer vordefinierten Reihenfolge aufgelöst, die als Operatorrangfolge bezeichnet wird.
Rangfolgeregeln
Wenn Ausdrücke Operatoren aus mehr als einer Kategorie enthalten, werden sie gemäß den folgenden Regeln ausgewertet:
Die arithmetischen und Verkettungsoperatoren haben die Reihenfolge der Rangfolge, die im folgenden Abschnitt beschrieben wird, und alle haben eine größere Rangfolge als die Vergleichsoperatoren, logische und bitweise Operatoren.
Alle Vergleichsoperatoren haben die gleiche Rangfolge, und alle haben eine größere Priorität als die logischen und bitweisen Operatoren, aber eine niedrigere Rangfolge als die arithmetischen und Verkettungsoperatoren.
Die logischen und bitweisen Operatoren weisen die im folgenden Abschnitt beschriebene Rangfolge auf, und alle haben eine niedrigere Rangfolge als die arithmetischen, Verkettungs- und Vergleichsoperatoren.
Operatoren mit gleicher Rangfolge werden in der Reihenfolge, in der sie im Ausdruck angezeigt werden, von links nach rechts ausgewertet.
Rangfolge
Operatoren werden in der folgenden Reihenfolge der Rangfolge ausgewertet:
Await-Operator
Await-
Arithmetische und Verkettungsoperatoren
Potenzierung (^
)
Unäre Identität und Negation (+
, –
)
Multiplikation und Gleitkommateilung (*
, /
)
Ganzzahldivision (\
)
Modulare Arithmetik (Mod
)
Addition und Subtraktion (+
, –
)
Zeichenfolgenverkettung (&
)
Arithmetische Bitverschiebung (<<
, >>
)
Vergleichsoperatoren
Alle Vergleichsoperatoren (=
, <>
, <
, <=
, >
, >=
, Is
, IsNot
, Like
, TypeOf
...Is
)
Logische und bitweise Operatoren
Negation (Not
)
Verbindung (And
, AndAlso
)
Inklusive Disjunktion (Or
, OrElse
)
Exklusive Disjunktion (Xor
)
Kommentare
Der =
-Operator ist nur der Gleichheitsvergleichsoperator, nicht der Zuordnungsoperator.
Der Zeichenfolgenverkettungsoperator (&
) ist kein arithmetischer Operator, aber in der Rangfolge wird er mit den arithmetischen Operatoren gruppiert.
Die Is
- und IsNot
-Operatoren sind Objektverweisvergleichsoperatoren. Sie vergleichen die Werte von zwei Objekten nicht; sie überprüfen nur, ob zwei Objektvariablen auf dieselbe Objektinstanz verweisen.
Assoziativität
Wenn Operatoren gleicher Rangfolge in einem Ausdruck zusammen angezeigt werden, z. B. Multiplikation und Division, wertet der Compiler jeden Vorgang aus, wenn er von links nach rechts auftritt. Dies wird anhand des folgenden Beispiels veranschaulicht.
Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)
Der erste Ausdruck wertet die Division 96 / 8 (was zu 12 führt) und dann die Division 12 / 4, was zu drei führt. Da der Compiler die Vorgänge für n1
von links nach rechts auswertet, ist die Auswertung identisch, wenn diese Reihenfolge explizit für n2
angegeben ist. Sowohl n1
als n2
haben ein Ergebnis von drei. Dagegen hat n3
das Ergebnis 48, da die Klammern den Compiler zwingen, zuerst 8 /4 auszuwerten.
Aufgrund dieses Verhaltens werden Operatoren in Visual Basic als linksassoziativ bezeichnet .
Vorrangige Priorität und Assoziativität
Sie können Klammern verwenden, um zu erzwingen, dass einige Teile eines Ausdrucks vor anderen ausgewertet werden. Dies kann sowohl die Reihenfolge der Rangfolge als auch die linke Assoziativität überschreiben. Visual Basic führt immer Vorgänge aus, die in Klammern vor diesen außen eingeschlossen sind. Innerhalb von Klammern behält sie jedoch die normale Rangfolge und Zuordnung bei, es sei denn, Sie verwenden Klammern innerhalb der Klammern. Dies wird anhand des folgenden Beispiels veranschaulicht.
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.