Типы nil, boolean и number
Изучаем три фундаментальных типа Lua: пустоту, истину/ложь и числа.
Тип данных — это вид значения, который определяет, что с ним можно делать: складывать числа, сравнивать логику и так далее.
В Lua всего восемь типов. В этом уроке разберём три самых базовых: nil, boolean и number. Узнать тип любого значения помогает функция type.
nil — отсутствие значения
nil означает «здесь ничего нет». Это значение по умолчанию для всего, что ещё не задано:
local door
print(door) -- nil, переменной не присвоили значение
print(type(door))Вывод:
nil nil
Присвоить переменной nil — значит «забыть» её значение. В играх так удаляют объекты: enemy = nil.
boolean — истина и ложь
Логический тип имеет ровно два значения: true и false. Они появляются в результате сравнений:
local hp = 50
print(hp > 0) -- жив ли игрок?
print(hp == 100) -- полное ли здоровье?Вывод:
true false
Важное правило истинности
В Lua ложными считаются только два значения: false и nil. Всё остальное — истина, включая ноль и пустую строку!
if 0 then print("ноль — это истина!") end
if "" then print("пустая строка — тоже истина!") endВывод:
ноль — это истина! пустая строка — тоже истина!
Это удивляет тех, кто пришёл из других языков, где ноль считается ложью.
number — числа
В Lua один тип для всех чисел — и целых, и дробных:
local gold = 100
local speed = 3.5
local half = gold / 3
print(half) -- деление всегда даёт дробь
print(10 % 3) -- остаток от деленияВывод:
33.333333333333 1
Как работает под капотом
В старых версиях Lua все числа были дробными (тип double). С Lua 5.3 появилось разделение на целые и дробные внутри одного типа number: 10 / 2 даёт дробное 5.0, а 10 // 2 (целочисленное деление) даёт целое 5. Для вас это почти незаметно, но иногда влияет на вывод.
Частые ошибки
- Считать
0или""ложью — в Lua они истинны. Ложны толькоfalseиnil. - Путать
=(присваивание) и==(сравнение на равенство). - Ожидать, что
10 / 2даст целое5— будет дробное5.0.
Итог
nil— отсутствие значения, тип по умолчанию для всего незаданного.booleanхранитtrueилиfalse; ложны в Lua толькоfalseиnil.number— единый тип для целых и дробных чисел;%даёт остаток.- Функция
type(значение)возвращает имя типа строкой.