Инструкции if, elseif и else
Научитесь реализовывать условную логику ветвления с помощью синтаксиса Lua if/elseif/else.
«Инструкции if, elseif и else» — бесплатный урок Lua Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Базовый оператор if
Оператор if проверяет условие и выполняет свой блок, если условие истинно. В Lua только false и nil являются ложными; всё остальное, включая 0 и "", истинно. Завершайте блок с помощью end.
local score = 85
if score >= 90 then
print("A grade")
end
if score >= 60 then
print("Passing") -- prints
end
if 0 then
print("0 is truthy!") -- prints in Lua
endif/elseif/else
Объединяйте несколько условий с помощью elseif, а запасной вариант задавайте с помощью else. Lua проверяет условия сверху вниз и выполняет только первую подходящую ветвь. В отличие от switch/case в других языках, elseif в Lua — это одно ключевое слово, а не сочетание else if.
local score = 75
if score >= 90 then
print("A")
elseif score >= 80 then
print("B")
elseif score >= 70 then
print("C") -- prints
elseif score >= 60 then
print("D")
else
print("F")
endЛогические операторы в условиях
В Lua используются логические операторы and, or и not. Они используют вычисление по сокращённой схеме: and возвращает первое ложное значение или последнее значение, а or — первое истинное значение или последнее значение. Это позволяет применять распространённые идиомы со значениями по умолчанию.
local age = 25
local hasID = true
if age >= 18 and hasID then
print("Entry allowed")
end
-- or for defaults
local name = nil
local display = name or "Guest"
print(display) -- GuestТернарная идиома с and/or
В Lua нет тернарного оператора, но конструкция and/or приближённо его заменяет: condition and trueVal or falseVal. Она работает, если trueVal не равно false или nil. Для более безопасной тернарной логики используйте встроенную функцию if.
local x = 10
local label = (x > 5) and "big" or "small"
print(label) -- big
-- Safe ternary function
local function ternary(cond, t, f)
if cond then return t else return f end
end
print(ternary(false, "yes", "no")) -- noВложенные операторы if
Операторы if можно вкладывать в другие ветви. Для каждого вложенного блока требуется собственный end. Глубокая вложенность часто указывает на возможность использовать досрочный возврат или защитные условия, чтобы упростить логику.
local loggedIn = true
local isAdmin = false
if loggedIn then
if isAdmin then
print("Admin dashboard")
else
print("User dashboard") -- prints
end
else
print("Login required")
endЗащитные условия
Защитное условие — это досрочный возврат, который обрабатывает недопустимые или особые случаи в начале функции и уменьшает вложенность. Благодаря этому основной сценарий остаётся без отступов и становится проще для чтения.
local function processAge(age)
if type(age) ~= "number" then
return nil, "age must be a number"
end
if age < 0 then
return nil, "age cannot be negative"
end
-- happy path
return math.floor(age)
end
print(processAge(25.7)) -- 25
print(processAge(-1)) -- nil age cannot be negativeСравнение значений
Операторы сравнения Lua: == (равно), ~= (не равно), <, >, <=, >=. Обратите внимание: ~= — это оператор «не равно» в Lua, а не !=. Строки сравниваются в лексикографическом порядке. Нельзя напрямую сравнивать строки с числами.
print(1 == 1) -- true
print(1 ~= 2) -- true
print("abc" < "abd") -- true (lexicographic)
print("10" == 10) -- false (different types)
-- Safe nil check
local val = nil
if val == nil then
print("no value")
endРавенство строк
Две строки равны в Lua тогда и только тогда, когда имеют одинаковое содержимое в байтах и одинаковую длину. Lua интернирует строки, поэтому равные строки часто указывают на одну и ту же область памяти, благодаря чему == может быстро сравнивать указатели. Никогда не сравнивайте строки с помощью is или сравнения ссылок — == всегда сравнивает значения.
local s1 = "hello"
local s2 = "hel" .. "lo"
print(s1 == s2) -- true (same content)
print(s1 == "Hello") -- false (case sensitive)
-- Check for empty string
local name = ""
if name == "" or name == nil then
print("name is empty or nil")
endСравнение таблиц и функций
Таблицы и функции сравниваются по ссылке, а не по содержимому. Два разных литерала таблиц с одинаковым содержимым не равны, если только они не являются одним и тем же объектом. Используйте метаметоды, например __eq, чтобы определить собственные правила равенства таблиц.
local t1 = {1, 2, 3}
local t2 = {1, 2, 3}
local t3 = t1
print(t1 == t2) -- false (different objects)
print(t1 == t3) -- true (same reference)
local f1 = function() end
local f2 = function() end
print(f1 == f2) -- falseРаспространённые идиомы
Распространённые идиомы Lua для условных конструкций: используйте assert() для проверки предусловий, приём and/or для задания кратких значений по умолчанию и избегайте двойного отрицания (not not x) для преобразования любого значения в логическое.
-- assert pattern
local function sqrt(n)
assert(n >= 0, "sqrt of negative")
return math.sqrt(n)
end
-- Convert to boolean
local val = 42
local boolVal = not not val
print(boolVal) -- true
-- Default parameter
local function greet(name)
name = name or "World"
print("Hello, " .. name)
end
greet() -- Hello, WorldБыстрая проверка
Какие значения являются ложными в Lua?
Повторение: условные конструкции
Краткое повторение:
if ... elseif ... else ... end— полная форма ветвления- Только
nilиfalseявляются ложными and/orиспользуют вычисление по сокращённой схеме и возвращают значения операндов~=означает «не равно» в Lua (не !=)- Таблицы и функции сравниваются по ссылке, строки — по значению
- Используйте защитные условия, чтобы уменьшить вложенность
Часто задаваемые вопросы
Урок «Инструкции if, elseif и else» бесплатный?
Да — полный текст урока «Инструкции if, elseif и else» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «Инструкции if, elseif и else»?
Научитесь реализовывать условную логику ветвления с помощью синтаксиса Lua if/elseif/else. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Инструкции if, elseif и else»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Инструкции if, elseif и else
- Циклы while и repeat-until
- Числовой цикл for
- Обобщённый for и break