Условия: if, elseif, else

Учим программу выбирать путь в зависимости от условий.

Условие — это проверка, которая позволяет программе выполнить разный код в зависимости от того, истинна она или ложна.

Без условий программа была бы прямой как рельс. Условия дают ветвление: если здоровье кончилось — игрок проиграл, иначе — продолжаем.

Базовый if

local hp = 0
if hp <= 0 then
  print("Игра окончена")
else
  print("Игрок жив, hp:", hp)
end

Вывод:

Игра окончена

Конструкция читается естественно: if ... then ... else ... end. Слово end закрывает блок — про него часто забывают.

Несколько веток: elseif

local score = 75
if score >= 90 then
  print("Отлично")
elseif score >= 70 then
  print("Хорошо")
elseif score >= 50 then
  print("Сойдёт")
else
  print("Попробуй ещё")
end

Вывод:

Хорошо

Lua проверяет ветки сверху вниз и выполняет первую подходящую, остальные пропускает.

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

ОператорЗначение
==равно
~=не равно
< >меньше, больше
<= >=меньше/больше или равно

Внимание: «не равно» в Lua пишется ~=, а не != как в большинстве языков.

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

Условия можно комбинировать через and, or, not:

local hp = 50
local hasShield = true
if hp > 0 and hasShield then
  print("Защищён и жив")
end
if not hasShield then
  print("Без щита")
end

Вывод:

Защищён и жив

Как работает под капотом

Операторы and и or в Lua «ленивы» и возвращают не true/false, а само значение. a and b даёт a, если оно ложно, иначе b. Это используют для значений по умолчанию: local name = input or "Гость" подставит «Гость», если input равен nil.

Частые ошибки

  • Писать != вместо ~= для «не равно» — это синтаксическая ошибка в Lua.
  • Забыть end в конце if — частая причина ошибок «unexpected symbol».
  • Путать = (присваивание) и == (сравнение) внутри условия.

Итог

  • Условие строится из if ... then ... elseif ... else ... end.
  • «Не равно» в Lua — это ~=; «равно» — ==.
  • Логику комбинируют операторы and, or, not.
  • or удобен для значений по умолчанию: x or default.
Проверьте себя
1. Как в Lua записывается оператор «не равно»?
A!=
B<>
C~=
D=/=
2. Что вернёт выражение input or "Гость", если input равен nil?
Anil
Btrue
C"Гость"
Dошибку