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.
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 = 15
der Variablen y den Wert 15 zu.
Im nächsten Ausdruck hat y += 10 - 2 * 3
der Multiplikationsoperator eine höhere Priorität als der Subtraktions- und zusammengesetzte Zuweisungsoperator ( +=
).
Daher wird der Ausdruck y += 10 - 2 * 3
als bewertet y = y + (10 - (2 * 3))
.
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 * 10
Ausdruck 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.