Очерёдность операций в программировании — установленная синтаксисом конкретного языка программирования последовательность выполнения операций (или направление вычисления), реализуемая когда операции имеют одинаковый приоритет и отсутствует явное (с помощью скобок) указание на очерёдность их выполнения. Ассоциативность (от лат. associatio) — свойство операций, позволяющее восстановить последовательность их выполнения при отсутствии явных указаний на очерёдность при равном приоритете; при этом различается левая ассоциативность, при которой вычисление выражения происходит слева направо, и правая ассоциативность — справа налево. Соответствующие операторы называют левоассоциативными и правоассоциативными.

Например, в языке Python большинство операций имеет левую ассоциативность, в то время как возведение в степень правоассоциативно:

Правая ассоциативность (вычисление выражения справа налево), возведение в степень в языке Python:

x ** y ** z == x ** (y ** z)
2 ** 2 ** 3 == 2 ** (2 ** 3) == 256
(2 ** 2) ** 3 == 64

Левая ассоциативность (вычисление выражения слева направо), побитовый сдвиг в языке Python:

x << y << z == (x << y) << z
2 << 2 << 3 == (2 << 2) << 3 == 64
2 << (2 << 3) == 2 << 16 == 131072

В C# все бинарные операции, кроме присваивания имеют левую ассоциативность:

8 / 4 / 2 == ( 8 / 4 ) / 2

См. также

править