0Pricing
Lua Academy · Урок

Инструкции 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
end

if/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 — локальная установка не требуется.

Все уроки этого курса

  1. Инструкции if, elseif и else
  2. Циклы while и repeat-until
  3. Числовой цикл for
  4. Обобщённый for и break
← Назад к Lua Academy