Операторы

Нет смысла изучать язык только теоретически. Нужно обязательно практиковаться. К тому же, так будет интереснее.

Мы пока изучили только работу с переменными и не дошли до функций, поэтому просто и без объяснений реквизируем команду print из примера в одной из первых глав. Не будем разбираться, что это такое и как оно работает. Просто примем за данность, что если мы напишем:

print(<что-то>)

то всё, что окажется внутри круглых скобок, будет напечатано в консоль. Так мы сможем видеть, что происходит в программе.

Также представим себе, что в начале программы уже объявлены две переменные:

local a, b = 10, 6

На практике все операторы можно проверить в интерпретаторе Lua в OpenOS, либо написать программу в отдельном файлике и запустить его.

Кроме того, можно воспользоваться онлайн демкой Lua по адресу: http://www.lua.org/cgi-bin/demo

Теперь можно и поэксперименировать.

Математические операторы

Lua предоставляет нам целый набор операторов для работы над числами. Они практически идентичны тем, что используются в математике.

Оператор Значение Пример
* умножить a * b равно 60
/ разделить a / b равно 1.6666666666667
+ сложить a + b равно 16
- (бинарный минус) вычесть a - b равно 4
% остаток от деления a % b равно 4 (целая часть — 6, и 4 в остатке)
^ возвести в степень a ^ b равно 1000000.0
- (унарный минус) противоположное число (отрицательное в положительное и наоборот) -a равно -10

Логические операторы

Логические операторы предназначены для работы с логическими значениями — то есть с булевыми.

Каждая логическая операция берёт два каких-либо аргумента и в качестве результата возвращает true или false. Тут всё тоже довольно просто.

Оператор Значение Пример
== возвращает true, если левая часть равна правой a == b равно false
~= возвращает true, если левая часть не равна правой a ~= b равно true
> возвращает true, если левая часть больше правой a > b равно true
< возвращает true, если левая часть меньше правой a < b равно false
>= возвращает true, если левая часть больше или равна правой a >= b равно true
<= возвращает true, если левая часть меньше или равна правой a <= b равно false

Все эти операторы очень пригодятся в следующей главе «Условия и циклы».

Кроме операторов сравнения, есть ещё три специальных оператора, которые в качестве аргументов берут логические значения. Они не имеют своих знаков в Lua, а пишутся словом:

Оператор Значение Пример
and логическое И, возвращает true, только если обе части тоже равны true true and false равно false
or логическое ИЛИ, возвращает true, если хотя бы одна часть равна true true and false равно true
not логическое НЕ, берёт только один аргумент и возвращает противоположное not true равно false

Специальные операторы

Кроме логических и математических есть ещё несколько операторов для всяких вспомогательных действий:

Оператор Значение Пример
.. конкатенация — предназначена для склеивания нескольких строк в одну "hello" .. "world" равно "helloworld"
( ) скобки — изменяют порядок вычислений, как в математике (a + a) * b равно 120
# длина таблицы — позволяет узнать количество элементов списка #{1, 2, 3} равно 3

Последний оператор изучим дополнительно в главе «Таблицы». А пока посмотрим на скобки. Что такое «порядок вычислений»?

Порядок вычислений

Допустим, у нас есть очень сложная формула:

local c = a * b + a - b / a ^ 2

Чему будет равно c ? Сложно сказать, правда? Не очень понятно с чего начать, что на что умножать и после чего.

Специально для того, чтобы облегчить программисту и компьютеру эту задачу, существует табличка "силы" операторов.

Вот она. Сверху - самые сильные операторы, снизу самые слабые.

Сила Операторы Порядок вычислений
1 ^ справа налево
2 not, #, - (унарный минус) справа налево
3 *, /, % слева направо
4 +, - (бинарный минус) слева направо
5 .. справа налево
6 <, >, <=, >=, ==, ~= слева направо
7 and слева направо
8 or слева направо

Формула начинает вычисляться от самых сильных операторов к самым слабым. Однако этот порядок можно изменить скобками. То, что находится внутри скобок, вычисляется раньше, чем то, что снаружи.

Например, в случае очень сложной формулы, что выше, это будет так:

local c = a * b + a - b / a ^ 2
        = (a * b) + a - (b / (a ^ 2))     -- упрощаем и делаем понятнее
        = 60 + 10 - (6 / 100)             -- подставляем значения переменных
        = 70 - 0.06
        = 69.94                           -- вуаля!

На практике, конечно, не стоит писать такие запутанные формулы, и всегда лучше явно разделить их скобками. Так будет проще понять, что происходит, с одного взгляда на формулу.

Также обратите внимание на пробелы, которые поставлены до и после операторов. Формула, разделённая пробелами, читается лучше, чем сплошная масса знаков. Это тоже одно из правил «чистого кода».

results matching ""

    No results matching ""