Em linguagens de programação, a associatividade de um operador é uma propriedade que determina como os operadores da mesma precedência são agrupados na ausência de parênteses. Se um operando é precedido e seguido por operadores (por exemplo, ^ 3 ^
), e esses operadores têm igual precedência, então o operando pode ser usado como entrada para duas operações diferentes (ou seja, as duas operações indicadas pelos dois operadores). A escolha das operações a que se aplica o operando, é determinada pela associatividade dos operadores. Os operadores podem ser associativos (ou seja, as operações podem ser agrupadas arbitrariamente), associados à esquerda (ou seja, as operações são agrupadas a partir da esquerda), associados à direita (ou seja, as operações são agrupadas a partir da direita) ou não associados (ou seja, as operações não podem ser encadeadas, muitas vezes porque o tipo de saída é incompatível com os tipos de entrada). A associatividade e precedência de um operador faz parte da definição da linguagem de programação; diferentes linguagens de programação podem ter associatividade e precedência diferentes para o mesmo tipo de operador.
Considerar a expressão a ~ b ~ c
. Se o operador ~
tiver deixado associatividade, esta expressão seria interpretada como (a ~ b) ~ c
. Se o operador tiver associatividade direita, a expressão seria interpretada como a ~ (b ~ c)
. Se o operador é não-associativo, a expressão pode ser um erro de sintaxe, ou pode ter algum significado especial. Alguns operadores matemáticos têm associatividade inerente. Por exemplo, a subtração e a divisão, como usada na notação matemática convencional, são inerentemente-associativas à esquerda. A adição e multiplicação, pelo contrário, são associativas tanto à esquerda como à direita. (ex. (a * b) * c = a * (b * c)
).
Muitos manuais de linguagem de programação fornecem uma tabela de precedência e associatividade dos operadores; veja, por exemplo, a tabela para C e C++.
O conceito de associatividade nocional aqui descrito está relacionado, mas diferente da associatividade matemática. Uma operação que é matematicamente associativa, por definição, não requer associatividade notarial. (Por exemplo, a adição tem a propriedade associativa, portanto não tem de ser associativa esquerda ou associativa direita). Uma operação que não seja matematicamente associativa, no entanto, deve ser notativa à esquerda, à direita ou não-associativa. (Por exemplo, a subtracção não tem a propriedade associativa, por isso deve ter associatividade nocional.)