Условия
Программа без условий — это просто список команд, которые всегда выполняются в одном и том же порядке. Но реальный мир не такой: иногда нужно повернуть, иногда — остановиться, иногда — включить сигнализацию.
Чтобы программа умела реагировать на разные ситуации, используются условия — конструкция if.
Базовая конструкция
Простой пример: черепашка проверяет топливо перед стартом:
Операторы сравнения
Условие — это всегда выражение, которое даёт true или false:
| Оператор | Значение | Пример |
|---|---|---|
== | равно | fuel == 0 |
~= | не равно | status ~= "ok" |
> | больше | diamonds > 10 |
< | меньше | fuel < 100 |
>= | больше или равно | slots >= 16 |
<= | меньше или равно | depth <= -50 |
В Lua "не равно" пишется как
~=, а не!=как в большинстве других языков.
if / else — два варианта
Когда нужно выполнить одно действие если условие верно, и другое — если нет:
if / elseif / else — несколько вариантов
Когда вариантов больше двух:
Компьютер проверяет ветки сверху вниз и выполняет первую подошедшую. Остальные игнорируются. Порядок важен — более конкретные условия пиши выше.
Важно для Lua:
elseifпишется слитно, одним словом. Если написатьelse ifраздельно — компьютер потребует отдельныйendдля каждой ветки, что приводит к ошибкам.
Что такое истина в Lua
В большинстве языков 0 и пустая строка считаются ложью. В Lua — нет.
Ложью (false) в Lua являются только два значения:
falsenil
Всё остальное — истина: 0, "", пустая таблица {}. Это неочевидно и часто удивляет программистов из других языков:
Условия в реальных программах
Условия появляются повсюду. Несколько практических паттернов:
Проверка перед копанием:
Выбор инструмента по типу блока:
Аварийная остановка:
🚀 Задания
Задание 1
Напиши программу: если уровень топлива черепашки ниже 50 — выведи предупреждение и попробуй заправиться из первого слота (turtle.refuel(1)). Иначе — просто выведи текущий уровень топлива.
Задание 2
Создай переменную time = "night". Напиши условие: если время "day" — выводи "Черепашка работает", если "night" — "Черепашка отдыхает", иначе — "Неизвестное время".
Задание 3
Черепашка проверяет блок перед собой (turtle.inspect()). Если это "minecraft:diamond_ore" — копает и выводит "Алмазная руда!". Если это "minecraft:stone" — просто копает. Иначе — не трогает и идёт дальше.
Задание 4 Найди ошибку в этом коде и объясни, почему она возникает:
Задание 5
Напиши программу с тремя elseif, которая проверяет инвентарь черепашки: если в первом слоте больше 32 предметов — "Слот переполнен", от 16 до 32 — "Слот заполнен наполовину", меньше 16 — "Слот почти пуст", 0 — "Слот пустой".