Переезд
Начат переезд на новый движок документации. Актуальная статья находится здесь.
Приоритет | Ассоциативность | Оператор | Описание | Пример |
---|---|---|---|---|
1 | Левая | [] | Доступ к индексу | a[b] |
1 | Левая | () | Вызов функции | a(b) |
1 | Левая | () | Скобки | (a + b) * c |
2 | Правая | not | Логическое НЕ | not a |
2 | Правая | - | Математическая смена знака | -a |
3 | Левая | * | Умножение | a*b |
3 | Левая | / | Деление | a/b |
3 | Левая | % | Модуль (оставшаяся часть от деления) (только Reforged) | a%b |
4 | Левая | + | Сложение | a+b |
4 | Левая | - | Вычитание | a-b |
5 | Левая | Меньше | a<b | |
5 | Левая | > | Больше | a>b |
5 | Левая | <= | Меньше или равно | a<=b |
5 | Левая | >= | Больше или равно | a>=b |
6 | Левая | == | Равно | a==b |
6 | Левая | != | Не равно | a!=b |
7 | Левая | and | Логическое И | a and b |
8 | Левая | or | Логическое ИЛИ | a or b |
9 | Правая | = | Присваивание | a=b |
10 | Левая | , | Перечисление | a,b |
Ассоциативность
Определяет направление разбора выражения.
- Левая: слева направо
- Правая: справа налево
Для примера возьмём правостороннее присваивание с левосторонним сложением:
a = b = c + d + e
Чтоб не вдаваться в подробности, представим что компилятор под капотом заведёт переменную x для промежуточных вычислений и тогда порядок будет таким:
x = c + d
x = x + e
b = x
a = b
Для любителей байткода выражение будет выглядеть так:
ASSIGN(a, ASSIGN(b, ADD(ADD(c, d), e)))
Приоритет
Операции выполняются не слева на право, а следуя приоритету. Чем меньше значение в таблице тем приоритет считается выше, тобишь операция выполнится раньше других. Для операций с одинаковым приоритетом операции будут выполняться в порядке, заданном ассоциативностью.
Возьмём операции с разным приоритетом, например присваивание, умножение и сложение:
a = b + c * d
Вспомнив про переменную x из прошлого абзаца, запишем порядок выполнения:
x = c * d
x = b + x
a = x
Так же не забудем про любителей байткода:
ASSIGN(a, ADD(b, MUL(c, d)))
Переезд