Swift: Precedence and Associativity (приоритет и ассоциативность)

У операторов существует приоритет, на основании которого решается какой оператор будет выполнен первым (например умножение выполнится раньше сложения)
Если же приоритет равен рассматривается ассоциативность, определяющая как операторы группируются — слева или справа

Например это выражение равно 4
2 + 3 * 4 % 5

Но если бы мы не следовали приоритетам наши шаги были бы следующие
2 + 3 = 5
5 * 4 = 20
20 % 5 = 0

Но, * и % имеют приоритет = 150 (по крайней мере в swift 1.2), и являются левоассоциативными (первым выполнится оператор слева, в нашем случае *).
+ же имеет приоритет 140
поэтому выражение можно переписать следующим образом

(2 + ((3 * 4) % 5))
3 * 4 = 12
12 % 5 = 2
2 + 2 = 4

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *