Love2D: Операторы в Lua

Руководство по Lua 5.1
Оператор = (равно) используется для присваивания переменным значений или быстрого вывода информации в консоль:
    > x = 7
    > print(x)
    7
    > = 7
    7
Операторы для арифметических выражений:
    > = 2+3, 5-12, 2*7, 7/8
    5       -7      14      0.875
    > = 5*(2-8.3)/77.7+99.1
    98.694594594595
Унарное отрицание:
    > = -(-10), -(10)
    10      -10
Остаток от деления по модулю:
    > = 15%7, -4%3, 5.5%1
    1       -1       0.5
Степень числа:
    > = 7^2, 107^0, 2^8
    49      1       256

Операторы сравнения

Сравнения возвращают логическое значение true или false.
  • == равно
  • ~= не равно
  • < меньше
  • > больше
  • <= меньше или равно
  • >= больше или равно
Примеры:
    > = 1 == 1, 1 == 0
    true    false
    > = 1 ~= 1, 1 ~= 0
    false   true
    > = 3 < 7, 7 < 7, 8 < 7
    true	false	false
    > = 3 > 7, 7 > 7, 8 > 7
    false	false	true
    > = 3 <= 7, 7 <= 7, 8 <= 7
    true    true    false
    > = 3 >= 7, 7 >= 7, 8 >= 7
    false   true    true
Также работает и со строками:
    > = "abc" < "def"
    true
    > = "abc" > "def"
    false
    > = "abc" == "abc"
    true
    > = "abc" == "a".."bc"
    true
Объекты не будут равны, если имеют разный тип или относятся к разным объектам:
    > = {} == "table"
    false
    > = {} == {}  -- созданы две разные таблицы
    false
    > t = {}
    > t2 = t
    > = t == t2   -- ссылаемся на одну и ту же таблицу
    true
Автоматическое приведение типов не работает при сравнении. Типы должны быть приведены явно:
    > = "10" == 10
    false
    > = tonumber("10") == 10
    true

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

в Lua существуют логические операторы and, or и not. В Lua только типы nil и false возвращают логическое значение false, все остальные - true, даже 0.
    > = false==nil   -- хоть эти типы оба и обозначают ""ложность", это всё-таки разные типы
    false
    > = true==false, true~=false
    false   true
    > = 1==0
    false
Ключевое слово not меняет логическое значение на противоположенное:
    > = true, false, not true, not false
    true    false   false   true
    > = not nil       -- nil обозначает false
    true
    > = not not true  -- true = not not true!
    true
    > = not "foo"     -- всё что не равно false или nil = true
    false
Оператор and во многих языках возвращает логическое значение в зависимости от двух аргументов. Но в Lua, возвращается первый аргумент (без учёта второго) если его значение false или nil, и второй, если первый не равен false или nil.
    > = false and true  -- первый аргумент - false, он и возвращается
    false
    > = nil and true    -- по аналогии 
    nil
    > = nil and false
    nil
    > = nil and "hello", false and "hello"
    nil     false
    > = false and print("hello") 
    false
В примерах выше, возвращается всегда первый аргумент, а в этих примерах - второй, т.к. первый не равен false или nil
    > = true and false
    false
    > = true and true
    true
    > = 1 and "hello", "hello" and "there"
    hello   there
    > = true and nil
    nil
    > = true and print("hello")
    hello
Оператор or возвращает первый аргумент, если он не равен false или nil, иначе возвращается второй аргумент:
    > = true or false
    true
    > = true or nil
    true
    > = "hello" or "there", 1 or 0
    hello   1
    > = true or print("hello")
    true
И парочка примеров с возвратом второго аргумента:
    > = false or true
    true
    > = nil or true
    true
    > = nil or "hello"
    hello
    > = false or print("hello")
    hello
Таким образом можно удобно устанавливать значения по умолчанию:
    > function foo(x)
    >>  local value = x or "default"  -- если x = false или nil, установится значение "default"
    >>  print(value, x)
    >> end
    >
    > foo()       -- мы не передали в функцию аргумент, поэтому x = nil
    default nil
    > foo(1)
    1       1
    > foo(true)
    true    true
    > foo("hello")
    hello   hello
Хоть в Lua нету троичного оператора, но можно создать что-то похожее, используя операторы and и оr
    value = condition and trueval or falseval;
Если условие (condition) = true, возвращается trueval, в противном случае - falseval
Выражение подобно конструкции a?b:c в C/js.
Помните, что у оператора and больший приоритет, чем у or
    value = (condition and trueval) or falseval;
данная статья является вольным переводом с сайта lua-users.org
с возможными дополнениями и изменениями

Просмотров: 7 519

Комментарии пока отсутcтвуют