Переменные в Lua

В Lua используется динамическая типизация переменных. Это значит, что нет смысла явно указывать тип переменных, достаточно присвоить желаемое значение, а уже сам компилятор определит и установит тип переменной. При этом возможна ситуация, когда переменная в разных местах кода меняет свой тип. Впрочем, это не является заботой программиста, что облегчает ему работу.

Имена переменных

В имени переменных допустимо использовать только латинские буквы и символ подчёркивания (_var). Переменные обязательно должны начинаться с латинской буквы или символа подчёркивания и не должны начинаться с цифры.

Правильные переменные
_lyric
dust
o_O
terminator2

Неправильные переменные
123 -- начинается с цифры
креветка -- содержит русские буквы
to-to -- содержит знак -

Типы переменных

В Lua есть несколько типов переменных: nil, логический, число, текст, функция, таблица.

nil
nil — это пустое значение. Любая переменная, которая ещё не получила значение имеет nil.

apple = 5; res = apple + b;

В данном примере будет выведена ошибка, поскольку переменная b явно не определена и по умолчанию равна nil, что и приводит к ошибке при сложении.

Логический
К логическому (булевому) типу относятся значения false (ложь) и true (истина). Значения nil и false считаются ложными, любое другое значение считается истинным.

if (a > 1) then 
  return true
end

В данном примере будет возвращена истина, если переменная a больше единицы.

Числа
Все числа в Lua являются вещественными (двойной точности с плавающей запятой, если вдаваться в подробности). Впрочем, если вы складываете два целых числа, то и результат увидите в виде целого числа.

res = 10 + 14;
print (res);

В данном случае будет выведено число 24.

Текст
Для обозначения текста применяются двойные или одинарные кавычки, а также их комбинация. Разницы между двойными и одинарными кавычками в большинстве случаев нет, за исключением случая, когда внутри текста встречается кавычка.

song1 = 'Bohemian Rhapsody';
song2 = "We Will Rock You";
song3 = "Don't Try So Hard";
song4 = 'You\'re My Best Friend';
song5 = 'Teo Torriatte ("Let Us Cling Together")';

В данном примере в первых двух переменных применяются разные кавычки и это никак не отражается на их значении. В тексте третьей строки встречается одинарная кавычка, поэтому, чтобы исключить конфликт кавычек, весь текст взят в двойные кавычки. В четвёртой строке текст взят в одинарные кавычки, а внутренний апостроф экранирован с помощью слэша (\'). В пятой строке весь текст взят в одинарные кавычки, поскольку внутри текста встречаются двойные кавычки.

Многострочный текст можно сделать двумя способами.

1. Использовать двойные кавычки, как показано выше и в месте перевода строки вставить \n.

text = "Это\nмногострочный\nтекст;

2. Обозначить многострочный текст двойными квадратными скобками, как показано ниже.

text = [[ Это
многострочный
текст ]]

Функция
Функции применяются для вызова фрагмента кода. Функции могут возвращать одно или несколько значений в зависимости от заданных параметров или вообще без них. В примере ниже функция возвращает ряд чисел в переменную lost.

lost = numbers();
function numbers()
  return 4, 8, 15, 16, 23, 42;
end

Таблица
Таблица представляет собой ассоциированный массив с широкими возможностями. В качестве индекса могут применяться не только числа, но и текст, за исключением nil. Ниже в примере показано, как определить таблицу и её значения.

t = {} -- определяем таблицу
t["foo"] = 123 -- значение 123 связано с ключом "foo" в таблице t
t[3] = "bar" -- значение "bar" связано с ключом 3 в таблице t

Ключевые слова

В качестве переменных нельзя использовать следующие зарезервированные ключевые слова:

and break do else elseif end false for function if in local nil not or repeat return then true until while

Глобальные и локальные переменные

Все переменные по умолчанию считаются глобальными, они доступны в любом месте кода. Если требуется локальная переменная, например, только внутри функции, то перед именем переменной добавляется ключевое слово local.

a = 1; -- глобальная переменная
local b = 2; -- локальная переменная
Автор: Влад Мержевич
Последнее изменение: 23.03.2024