En los lenguajes de programación, la asociatividad de un operador es una propiedad que determina cómo se agrupan los operadores de la misma precedencia en ausencia de paréntesis. Si un operando está precedido y seguido por operadores (por ejemplo, ^ 3 ^
), y esos operadores tienen igual precedencia, entonces el operando puede ser utilizado como entrada a dos operaciones diferentes (es decir, las dos operaciones indicadas por los dos operadores). La elección de las operaciones a las que se aplica el operando viene determinada por la asociatividad de los operadores. Los operadores pueden ser asociativos (lo que significa que las operaciones pueden agruparse arbitrariamente), asociativos a la izquierda (lo que significa que las operaciones se agrupan por la izquierda), asociativos a la derecha (lo que significa que las operaciones se agrupan por la derecha) o no asociativos (lo que significa que las operaciones no pueden encadenarse, a menudo porque el tipo de salida es incompatible con los tipos de entrada). La asociatividad y precedencia de un operador es parte de la definición del lenguaje de programación; diferentes lenguajes de programación pueden tener diferente asociatividad y precedencia para el mismo tipo de operador.
Considere la expresión a ~ b ~ c
. Si el operador ~
tiene asociatividad izquierda, esta expresión se interpretaría como (a ~ b) ~ c
. Si el operador tiene asociatividad derecha, la expresión se interpretaría como a ~ (b ~ c)
. Si el operador no es asociativo, la expresión podría ser un error de sintaxis, o podría tener algún significado especial. Algunos operadores matemáticos tienen una asociatividad inherente. Por ejemplo, la resta y la división, tal como se utilizan en la notación matemática convencional, son inherentemente asociativas a la izquierda. La suma y la multiplicación, por el contrario, son asociativas tanto a la izquierda como a la derecha. (por ejemplo, (a * b) * c = a * (b * c)
).
Muchos manuales de lenguajes de programación proporcionan una tabla de precedencia y asociatividad de operadores; véase, por ejemplo, la tabla para C y C++.
El concepto de asociatividad notacional descrito aquí está relacionado con, pero es diferente de la asociatividad matemática. Una operación que es matemáticamente asociativa, por definición no requiere ninguna asociatividad notacional. (Por ejemplo, la adición tiene la propiedad asociativa, por lo que no tiene que ser ni asociativa a la izquierda ni asociativa a la derecha). Una operación que no es matemáticamente asociativa, sin embargo, debe ser notacionalmente izquierda, derecha o no asociativa. (Por ejemplo, la resta no tiene la propiedad asociativa, por lo que debe tener asociatividad notacional.)