Dans les langages de programmation, l’associativité d’un opérateur est une propriété qui détermine comment les opérateurs de même précédence sont regroupés en l’absence de parenthèses. Si un opérande est à la fois précédé et suivi d’opérateurs (par exemple, ^ 3 ^
), et que ces opérateurs ont la même précédence, alors l’opérande peut être utilisé comme entrée de deux opérations différentes (c’est-à-dire les deux opérations indiquées par les deux opérateurs). Le choix des opérations auxquelles appliquer l’opérande est déterminé par l’associativité des opérateurs. Les opérateurs peuvent être associatifs (ce qui signifie que les opérations peuvent être regroupées arbitrairement), associatifs à gauche (ce qui signifie que les opérations sont regroupées à gauche), associatifs à droite (ce qui signifie que les opérations sont regroupées à droite) ou non associatifs (ce qui signifie que les opérations ne peuvent pas être enchaînées, souvent parce que le type de sortie est incompatible avec les types d’entrée). L’associativité et la précédence d’un opérateur font partie de la définition du langage de programmation ; différents langages de programmation peuvent avoir une associativité et une précédence différentes pour le même type d’opérateur.
Considérez l’expression a ~ b ~ c
. Si l’opérateur ~
a une associativité gauche, cette expression serait interprétée comme (a ~ b) ~ c
. Si l’opérateur a une associativité à droite, l’expression serait interprétée comme a ~ (b ~ c)
. Si l’opérateur n’est pas associatif, l’expression peut être une erreur de syntaxe ou avoir une signification particulière. Certains opérateurs mathématiques ont une associativité inhérente. Par exemple, la soustraction et la division, telles qu’utilisées dans la notation mathématique conventionnelle, sont intrinsèquement associatives à gauche. L’addition et la multiplication, en revanche, sont à la fois associatives à gauche et à droite. (par exemple (a * b) * c = a * (b * c)
).
De nombreux manuels de langage de programmation fournissent un tableau de la précédence et de l’associativité des opérateurs ; voir, par exemple, le tableau pour le C et le C++.
Le concept d’associativité notationnelle décrit ici est lié, mais différent de l’associativité mathématique. Une opération qui est mathématiquement associative, par définition ne nécessite pas d’associativité notationnelle. (Par exemple, l’addition possède la propriété associative, elle n’a donc pas besoin d’être associative à gauche ou à droite). Une opération qui n’est pas mathématiquement associative, cependant, doit être notationnellement gauche, droite ou non-associative. (Par exemple, la soustraction n’a pas la propriété associative, elle doit donc avoir une associativité notationnelle.)