Schnelle Priorität und Assoziativität des Operators (mit Beispielen)

In diesem Artikel erfahren Sie mehr über die Regeln, die zum Auswerten eines Ausdrucks mit Operatoren und Operanden verwendet werden.

Schneller Vorrang des Operators

Die Operatorrangfolge ist eine Sammlung von Regeln, die zur Bewertung eines bestimmten mathematischen Ausdrucks verwendet werden. Wenn in einem Ausdruck mehrere Operatoren verwendet werden, wird jeder Teil in einer bestimmten Reihenfolge ausgewertet, die als Operatorpriorität bezeichnet wird. Bestimmte Operatoren haben eine höhere Priorität als andere, was sich auf die Auswertung eines Ausdrucks auswirkt.

Operator-Prioritätstabelle

In der folgenden Tabelle ist die Priorität von Operatoren in Swift aufgeführt. Je höher es in der Tabelle erscheint, desto höher ist seine Priorität.

Swift Standard Library Precedence Groups (höchste bis niedrigste)
Operatorgruppen Beispiele
Vorrang bei bitweiser Verschiebung >> & <>>>
Vorrang der Multiplikation & *% & * /
Vorrang vor dem Hinzufügen | & + & - + - ^
Rangbildungsrang … <…
Casting Vorrang ist wie
Null-Koaleszenz-Vorrang ??
Vergleich Vorrang ! => = <= === ==
Vorrang der logischen Konjunktion &&
Vorrang der logischen Disjunktion ||
Standardvorrang ~>
Ternäre Priorität ?:
Priorität des Funktionspfeils ()
Zuweisungsrang | =% = / = & <> = & = * = >> = << = = + = - =

Beispiel 1: Vorrang für schnelle Operatoren

 let x = 4 + 5 * 5 print(x) 

Wenn Sie das obige Programm ausführen, lautet die Ausgabe wie folgt:

 29

Wenn Sie im obigen Beispiel den Ausdruck von links nach rechts lesen, können Sie erwarten, dass die Ausgabe 45 ist. Der Multiplikationsoperator hat jedoch eine höhere Priorität als der Additionsoperator, sodass der Ausdruck 4 + 5 * 5 als ausgewertet wird 4 + (5 * 5). Daher print(x)gibt 29 auf dem Bildschirm aus.

Ausführungsschritte
Schritte Operator Ausdruck Vom Ausdruck zurückgegebener Wert
1 * * 5 * 5 25
2 + 4 + 25 29
3 = print (x) 29

Beispiel 2: Swift Operator Priority mit komplexem Zuweisungsoperator

 var y = 15 y += 10 - 2 * 3 print(y) 

Wenn Sie das obige Programm ausführen, lautet die Ausgabe wie folgt:

 19

Im obigen Beispiel weist der Ausdruck var y = 15der Variablen y den Wert 15 zu.

Im nächsten Ausdruck hat y += 10 - 2 * 3der Multiplikationsoperator eine höhere Priorität als der Subtraktions- und zusammengesetzte Zuweisungsoperator ( +=).

Daher wird der Ausdruck y += 10 - 2 * 3als bewertet y = y + (10 - (2 * 3)).

Ausführungsschritte
Schritte Operator Ausdruck Vom Ausdruck zurückgegebener Wert
1 = var y = 15 fünfzehn
2 * * 2 * 3 6
3 - - 10 - 6 4
4 + = 15 + 4 19

Schnelle Operatorassoziativität

Obwohl es vordefinierte Regeln gibt, die durch die Operatorrangfolge definiert sind, um einen Ausdruck auszuwerten, fragen Sie sich möglicherweise, was passiert, wenn mehrere Operatoren mit derselben Prioritätsstufe vorhanden sind. Die Operatorassoziativität definiert, wie Operatoren mit derselben Priorität zusammen gruppiert werden.

In Swift können Operatoren entweder linksassoziativ, rechtsassoziativ sein oder keine Assoziativität aufweisen. Linksassoziative Operatoren gruppieren ihre Operanden links von der Anweisung, rechtsassoziative Operatoren rechts und Operatoren ohne Assoziativität haben kein definiertes Verhalten, wenn sie nacheinander in einem Ausdruck verwendet werden.

Operatorassoziativitätstabelle

Die folgende Tabelle zeigt die Assoziativität von Swift-Operatoren zusammen mit der Priorität.

Schnelle Assoziativität der Standardbibliothek (Vorrang am höchsten bis am niedrigsten)
Operatorgruppen Beispiele Assoziativität
Vorrang bei bitweiser Verschiebung >> & <>>> keiner
Vorrang der Multiplikation & *% & * / links
Vorrang vor dem Hinzufügen | & + & - + - ^ links
Rangbildungsrang … <… keiner
Casting Vorrang ist wie keiner
Null-Koaleszenz-Vorrang ?? Recht
Vergleich Vorrang ! => = <= === == keiner
Vorrang der logischen Konjunktion && links
Vorrang der logischen Disjunktion || links
Standardvorrang ~> keiner
Ternäre Priorität ?: Recht
Priorität des Funktionspfeils () Recht
Zuweisungsrang | =% = / = & <> = & = * = >> = << = = Recht

Beispiel 3: Schnelle Operatorassoziativität

 let x = 40 / 2 * 10 print(x) 

Wenn Sie das obige Programm ausführen, lautet die Ausgabe wie folgt:

 200

Im obigen Programm wird der Ausdruck von links nach rechts ausgewertet, da die Operatoren in Multiplikationsprioritätsgruppen fallen und Assoziativität hinterlassen haben. Daher findet die Teilungsoperation früher statt und Sie erhalten das Ergebnis 200 . Was ist, wenn Sie zuerst die Multiplikation ausführen möchten? Sie müssen den 2 * 10Ausdruck in () geschweifte Klammern setzen:

 let x = 40 / (2 * 10) print(x) 

Wenn Sie das obige Programm ausführen, lautet die Ausgabe wie folgt:

 2

Sie müssen sich die Rangfolge und die assoziative Tabelle nicht merken. In den meisten Fällen ist die Priorität und Assoziativität von Operatoren an sich sinnvoll. Im Zweifelsfall können Sie die Tabelle jederzeit als Referenz verwenden. Es ist auch besser, Klammern zu verwenden, um das Verständnis Ihres Codes zu erleichtern.

Interessante Beiträge...