Типы 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(значение) возвращает имя типа строкой.
Проверьте себя
1. Какие значения считаются ложными (falsy) в Lua?
A0 и пустая строка
Bfalse и nil
C0, false и nil
Dтолько false
2. Что означает значение nil?
AЧисло ноль
BПустую строку
CОтсутствие значения
DЛогическую ложь, равную false