Условия с else и elseif
Ранее if просто проверял условие и выполнял код если оно истинно. Но часто нужен не один вариант, а два или больше: если одно — делай это, иначе — то.
else — запасная ветка
else добавляет код, который выполняется когда условие if оказалось ложным:
local hour = 14
if hour < 12 then
print("Доброе утро!")
else
print("Добрый день!")
end
Только одна из двух веток выполнится — никогда обе.
local balance = 500
local price = 800
if balance >= price then
print("Покупка совершена")
balance = balance - price
else
print("Недостаточно средств. Не хватает: " .. (price - balance))
end
local password = "qwerty"
if password == "secret123" then
print("Добро пожаловать!")
openDoor()
else
print("Неверный пароль. Попытка записана.")
logFailedAttempt()
end
elseif — несколько вариантов
Когда вариантов больше двух — добавляй elseif. Можно добавить сколько угодно:
local score = 74
if score >= 90 then
print("Отлично")
elseif score >= 75 then
print("Хорошо")
elseif score >= 60 then
print("Удовлетворительно")
else
print("Неудовлетворительно")
end
Компьютер проверяет ветки сверху вниз и выполняет первую подошедшую. Остальные игнорирует, даже если они тоже истинны.
local month = 8
if month == 12 or month == 1 or month == 2 then
print("Зима")
elseif month >= 3 and month <= 5 then
print("Весна")
elseif month >= 6 and month <= 8 then
print("Лето")
else
print("Осень")
end
Важно для Lua: elseif пишется слитно, одним словом. else if раздельно — это другая конструкция, которая требует отдельный end и часто приводит к ошибкам.
Порядок веток имеет значение
Ветки проверяются последовательно. Более конкретные условия ставь выше:
local fuel = 15
-- Правильный порядок: сначала самое критичное
if fuel == 0 then
print("Нет топлива! Аварийная остановка.")
elseif fuel < 10 then
print("Критический уровень, немедленно заправиться")
elseif fuel < 50 then
print("Мало топлива, скоро нужна заправка")
else
print("Топлива достаточно")
end
Если поменять местами fuel == 0 и fuel < 10, то нулевое топливо попадёт в ветку "критический уровень" и никогда не достигнет своего сообщения об аварийной остановке.
Практические примеры
Обработка HTTP-статусов:
local statusCode = 404
if statusCode == 200 then
print("OK — запрос выполнен успешно")
elseif statusCode == 301 or statusCode == 302 then
print("Перенаправление")
elseif statusCode == 403 then
print("Доступ запрещён")
elseif statusCode == 404 then
print("Страница не найдена")
elseif statusCode >= 500 then
print("Ошибка сервера")
else
print("Неизвестный статус: " .. statusCode)
end
Категоризация предмета по имени:
local itemName = "minecraft:diamond"
if itemName == "minecraft:diamond" or itemName == "minecraft:emerald" then
print("Ценный минерал — в сейф")
elseif itemName == "minecraft:iron_ore" or itemName == "minecraft:gold_ore" then
print("Руда — на переплавку")
elseif itemName == "minecraft:cobblestone" or itemName == "minecraft:dirt" then
print("Мусор — выбросить")
else
print("Неизвестный предмет: " .. itemName)
end
🚀 Задания
Задание 1
Напиши программу оценки температуры: ниже 0 — "Мороз", 0–15 — "Холодно", 16–25 — "Комфортно", выше 25 — "Жара". Используй elseif.
Задание 2
Создай переменную day = "Wednesday". Напиши условие: если понедельник или пятница — "Начало/конец недели", если суббота или воскресенье — "Выходной", иначе — "Рабочий день".
Задание 3
Напиши классификатор файлов по расширению. Переменная ext содержит расширение ("png", "mp3", "lua" и т.д.). Раздели на категории: изображения, аудио, видео, код, другое.
Задание 4
Найди ошибку: почему вторая ветка никогда не выполнится?
local x = 5
if x > 0 then
print("Положительное")
elseif x > 3 then
print("Больше трёх")
end
Задание 5
Напиши систему скидок: если сумма покупки > 10000 — скидка 20%, > 5000 — 10%, > 1000 — 5%, иначе — без скидки. Выведи финальную цену после скидки.