Operatorrangfolge in Visual Basic

Treten mehrere Operationen in einem Ausdruck auf, wird jedes Teil in einer vorbestimmten Reihenfolge ausgewertet und aufgelöst. Dies wird als Operatorrangfolge bezeichnet.

Rangfolgenregeln

Wenn ein Ausdruck Operatoren aus mehreren Kategorien enthält, werden sie gemäß den folgenden Regeln ausgewertet:

  • Die arithmetischen Operatoren und Verkettungsoperatoren haben die im folgenden Abschnitt beschriebene Rangfolge. Sie haben gegenüber Vergleichsoperatoren, logischen sowie bitweisen Operatoren Vorrang.

  • Alle Vergleichsoperatoren haben den gleichen Rang, und alle haben Vorrang gegenüber den logischen und bitweisen Operatoren, sind jedoch den arithmetischen Operatoren und Verkettungsoperatoren nachgeordnet.

  • Die logischen und bitweisen Operatoren haben die im folgenden Abschnitt beschriebene Rangfolge und einen niedrigeren Rang als die arithmetischen Operatoren sowie die Verkettungs- und Vergleichsoperatoren.

  • Operatoren mit gleichem Rang werden von links nach rechts in der Reihenfolge ausgewertet, in der sie im Ausdruck vorkommen.

Rangfolgenreihenfolge

Operatoren werden in der folgenden Rangfolge ausgewertet:

Arithmetische Operatoren und Verkettungsoperatoren

Potenzierung (^)

Unäre Identität und Negation (+, –)

Multiplikation und Gleitkommadivision (*, /)

Ganzzahldivision (\)

Modulooperator (Mod)

Addition und Subtraktion (+, –), Zeichenfolgenverkettung (+)

Zeichenfolgenverkettung (&)

Arithmetische Bitverschiebung (<<, >>)

Vergleichsoperatoren

Alle Vergleichsoperatoren (=, <>, <, <=, >, >=, Is, IsNot, Like, TypeOf...Is)

Logische und bitweise Operatoren

Negation (Not)

Konjunktion (And, AndAlso)

Inklusive Disjunktion (Or, OrElse)

Exklusive Disjunktion (Xor)

Anmerkungen

Der Operator = ist nur der Gleichheitsvergleichsoperator, nicht der Zuweisungsoperator.

Der Operator für die Zeichenfolgenverkettung (&) ist kein arithmetischer Operator, wird aber in Bezug auf die Rangfolge der Gruppe der arithmetischen Operatoren zugeordnet.

Der Operator Is und der Operator IsNot sind Objektverweisvergleichsoperatoren. Sie vergleichen nicht die Werte zweier Objekte, sondern prüfen lediglich, ob zwei Objektvariablen auf dieselbe Objektinstanz verweisen.

Assoziativität

Treffen Operatoren mit dem gleichen Rang in einem Ausdruck zusammen, z. B. Multiplikation und Division, wertet der Compiler jede Operation bei ihrer Ausführung von links nach rechts aus. 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)

Im ersten Ausdruck wird zuerst die Division 96 / 8 berechnet (ergibt 12) und anschließend 12 / 4 (ergibt 3). Da der Compiler die Operationen für n1 von links nach rechts auswertet, ist die Auswertung identisch, wenn diese Reihenfolge für n2 explizit angegeben wird. Sowohl n1 als auch n2 ergeben drei. Im Gegensatz ergibt n3 48, da 8 / 4 aufgrund der Klammern zuerst vom Compiler ausgewertet wird.

Aufgrund dieses Verhaltens werden Operatoren in Visual Basic als linksassoziativ bezeichnet.

Überschreiben von Rangfolge und Assoziativität

Mithilfe von runden Klammern können Sie erzwingen, dass einige Teile eines Ausdrucks vor anderen ausgewertet werden. Dadurch können sowohl die Rangfolge als auch die Linksassoziativität überschrieben werden. Visual Basic führt immer Vorgänge aus, die in Klammern vor den außerhalb befindlichen eingeschlossen sind. Behält jedoch innerhalb der Klammern die normale Rangfolge und Assoziativität 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.

Siehe auch

Referenz

=-Operator (Visual Basic)

Is-Operator (Visual Basic)

IsNot-Operator (Visual Basic)

Like-Operator (Visual Basic)

TypeOf-Operator (Visual Basic)

Operatoren sortiert nach Funktionalität (Visual Basic)

Konzepte

Operatoren und Ausdrücke in Visual Basic