Nei linguaggi di programmazione, l’associatività di un operatore è una proprietà che determina come gli operatori della stessa precedenza sono raggruppati in assenza di parentesi. Se un operando è sia preceduto che seguito da operatori (per esempio, ^ 3 ^
), e questi operatori hanno la stessa precedenza, allora l’operando può essere usato come input per due operazioni diverse (cioè le due operazioni indicate dai due operatori). La scelta a quali operazioni applicare l’operando è determinata dall’associatività degli operatori. Gli operatori possono essere associativi (cioè le operazioni possono essere raggruppate arbitrariamente), associativi a sinistra (cioè le operazioni sono raggruppate da sinistra), associativi a destra (cioè le operazioni sono raggruppate da destra) o non associativi (cioè le operazioni non possono essere concatenate, spesso perché il tipo di uscita è incompatibile con i tipi di ingresso). L’associatività e la precedenza di un operatore fanno parte della definizione del linguaggio di programmazione; linguaggi di programmazione diversi possono avere associatività e precedenza diverse per lo stesso tipo di operatore.
Considera l’espressione a ~ b ~ c
. Se l’operatore ~
ha associatività sinistra, questa espressione verrebbe interpretata come (a ~ b) ~ c
. Se l’operatore ha associatività destra, l’espressione sarebbe interpretata come a ~ (b ~ c)
. Se l’operatore non è associativo, l’espressione potrebbe essere un errore di sintassi, o potrebbe avere qualche significato speciale. Alcuni operatori matematici hanno un’associatività intrinseca. Per esempio, la sottrazione e la divisione, come usate nella notazione matematica convenzionale, sono intrinsecamente associate a sinistra. L’addizione e la moltiplicazione, al contrario, sono associative sia a destra che a sinistra. (es. (a * b) * c = a * (b * c)
).
Molti manuali di linguaggi di programmazione forniscono una tabella di precedenza degli operatori e di associatività; vedi, per esempio, la tabella per C e C++.
Il concetto di associatività notazionale descritto qui è collegato, ma diverso dall’associatività matematica. Un’operazione che è matematicamente associativa, per definizione non richiede associatività notazionale. (Per esempio, l’addizione ha la proprietà associativa, quindi non deve essere associativa sinistra o associativa destra). Un’operazione che non è matematicamente associativa, tuttavia, deve essere nozionalmente sinistra, destra o non associativa. (Per esempio, la sottrazione non ha la proprietà associativa, quindi deve avere associatività notazionale.