Operator Precedence (Operator-Priorität)
Kurz: Die feste Reihenfolge, in der Operatoren innerhalb eines Ausdrucks mit mehreren Operatoren ausgewertet werden — ähnlich der “Punkt vor Strich”-Regel aus der Mathematik.
Genauer: Multiplikation und Division haben z. B. höhere Priorität als Addition und Subtraktion, sodass 2 + 3 * 4 als 2 + (3 * 4) = 14 ausgewertet wird, nicht als (2 + 3) * 4. Klammern überschreiben die Standard-Priorität explizit und machen komplexe Ausdrücke außerdem für Menschen leichter lesbar — im Zweifel lohnt sich eine Klammer mehr, als sich auf das korrekte Erinnern der Prioritätsregeln zu verlassen.
Im Detail
Eine ungefähre, vereinfachte Rangfolge (von hoch nach niedrig), wie sie in vielen C-artigen Sprachen gilt:
1. Klammern ()
2. Unäre Operatoren (! - Vorzeichen)
3. Multiplikation, Division, Modulo (* / %)
4. Addition, Subtraktion (+ -)
5. Vergleichsoperatoren (< > <= >= == !=)
6. Logisches UND (&&)
7. Logisches ODER (||)
8. Zuweisung (=)Diese Reihenfolge erklärt Ausdrücke, die auf den ersten Blick mehrdeutig wirken könnten:
2 + 3 * 4 === 14 // Punkt-vor-Strich: erst 3*4, dann +2
a && b || c // erst a&&b (höhere Priorität), dann ||c
!istLeer && groesse > 0 // erst !istLeer, dann Vergleich, dann &&Neben der Priorität (WELCHER Operator zuerst drankommt) spielt bei gleicher Priorität zusätzlich die Assoziativität eine Rolle — sie legt fest, in welcher Richtung ausgewertet wird, wenn mehrere gleichrangige Operatoren hintereinanderstehen. Die meisten arithmetischen Operatoren sind linksassoziativ (10 - 3 - 2 wird als (10 - 3) - 2 = 5 gelesen, nicht als 10 - (3 - 2) = 9), Zuweisungen sind dagegen meist rechtsassoziativ (a = b = 5 weist zuerst b = 5 zu, dann a = b).
In der Praxis ist es kein Zeichen von Schwäche, bei komplexeren Ausdrücken großzügig Klammern zu setzen, auch wenn sie technisch nicht nötig wären — Code wird deutlich häufiger gelesen als geschrieben, und explizite Klammern ersparen jedem, der später über den Code stolpert (inklusive einem selbst, Monate später), das mühsame Nachrechnen der Prioritätsregeln im Kopf.
Siehe auch: Operatoren, Arithmetic Operators