Operator-Assoziativität

Zum mathematischen Konzept der Assoziativität siehe Assoziative Eigenschaft.

In Programmiersprachen ist die Assoziativität eines Operators eine Eigenschaft, die festlegt, wie Operatoren gleicher Rangordnung ohne Klammern gruppiert werden. Wenn einem Operanden sowohl Operatoren vorangestellt als auch nachgestellt sind (z. B. ^ 3 ^) und diese Operatoren den gleichen Vorrang haben, kann der Operand als Eingabe für zwei verschiedene Operationen verwendet werden (d. h. die beiden Operationen, die durch die beiden Operatoren angegeben werden). Die Wahl, für welche Operationen der Operand verwendet werden soll, wird durch die Assoziativität der Operatoren bestimmt. Operatoren können assoziativ (d. h. die Operationen können beliebig gruppiert werden), links-assoziativ (d. h. die Operationen werden von links gruppiert), rechts-assoziativ (d. h. die Operationen werden von rechts gruppiert) oder nicht-assoziativ (d. h. die Operationen können nicht verkettet werden, oft weil der Ausgabetyp nicht mit den Eingabetypen kompatibel ist) sein. Die Assoziativität und der Vorrang eines Operators sind Teil der Definition der Programmiersprache; verschiedene Programmiersprachen können unterschiedliche Assoziativität und Vorrang für denselben Typ von Operator haben.

Betrachte den Ausdruck a ~ b ~ c. Wenn der Operator ~ links-assoziativ ist, würde dieser Ausdruck als (a ~ b) ~ c interpretiert werden. Wenn der Operator rechts-assoziativ ist, würde der Ausdruck als a ~ (b ~ c) interpretiert werden. Wenn der Operator nicht assoziativ ist, könnte der Ausdruck ein Syntaxfehler sein, oder er könnte eine besondere Bedeutung haben. Einige mathematische Operatoren haben eine inhärente Assoziativität. Zum Beispiel sind Subtraktion und Division, wie sie in der konventionellen mathematischen Notation verwendet werden, von Natur aus links-assoziativ. Addition und Multiplikation hingegen sind sowohl links- als auch rechtsassoziativ. (z.B. (a * b) * c = a * (b * c)).

Viele Handbücher für Programmiersprachen enthalten eine Tabelle mit der Rangfolge der Operatoren und der Assoziativität; siehe z.B. die Tabelle für C und C++.

Das hier beschriebene Konzept der Notationsassoziativität ist mit der mathematischen Assoziativität verwandt, unterscheidet sich aber von ihr. Eine Operation, die mathematisch assoziativ ist, erfordert per Definition keine notationale Assoziativität. (Zum Beispiel hat die Addition die assoziative Eigenschaft und muss daher weder links- noch rechts-assoziativ sein). Eine Operation, die nicht mathematisch assoziativ ist, muss jedoch notationell links-, rechts- oder nicht-assoziativ sein. (Zum Beispiel hat die Subtraktion nicht die assoziative Eigenschaft, also muss sie notational assoziativ sein.)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.