Инструкция if
До сих пор ваши программы выполняли все строки по очереди, сверху вниз. Но часто программе нужно принять решение: полить поле, только если не было дождя, или отвезти яйца на рынок, только если их достаточно. Люди принимают такие решения постоянно: если пойдёт дождь, я возьму зонт.
В Lua решение записывают с помощью инструкции if:
local eggs = 14
if eggs > 12 then
print("Яиц хватает для рынка")
end
print("Яиц в корзине: " .. eggs)Программа выведет:
Яиц хватает для рынка
Яиц в корзине: 14В инструкции if есть такие части:
- ключевое слово
if. Ключевое слово — это слово с особым значением в Lua, поэтому его нельзя использовать как имя переменной; - условие:
eggs > 12. Условие — это вопрос, на который можно ответить только «да» (true) или «нет» (false): правда ли, что яиц больше 12? - ключевое слово
then, которое завершает условие; - блок кода: строки между
thenиend. Блок выполняется, только если условие истинно; - ключевое слово
end, которое завершает блок и всю инструкциюif.
После end программа продолжается как обычно, поэтому Яиц в корзине: 14 выводится в любом случае. Если бы eggs было равно 8, условие было бы ложным: программа пропустила бы блок и вывела только Яиц в корзине: 8.
В условии можно сравнивать с помощью > (больше) и < (меньше), как в математике. Остальные сравнения вы узнаете в следующем упражнении.
Строки блока записаны с отступом: они начинаются с 4 пробелов. Lua это не нужно, ведь принадлежность к блоку определяют then и end. Отступ нужен людям: он сразу показывает, какие строки выполняются не всегда, поэтому всегда его ставьте. Клавиша Tab добавляет 4 пробела, а когда вы нажимаете Enter, новая строка получает отступ предыдущей; перед end его нужно удалить.
Самые частые ошибки — пропущенные then и end. Lua находит обе до запуска программы, поэтому ничего не выводится:
local eggs = 14
if eggs > 12
print("Яиц хватает для рынка")
endmain.lua:3: 'then' expected near 'print'Ошибка указывает на строку 3, потому что Lua замечает отсутствие then только на print. Если нет end, Lua доходит до конца программы, <eof> («конец файла»), и сообщает, какой if остался незакрытым:
local eggs = 14
if eggs > 12 then
print("Яиц хватает для рынка")
print("Яиц в корзине: " .. eggs)main.lua:4: 'end' expected (to close 'if' at line 2) near <eof>Задание
- 1
Под последней строкой напишите инструкцию
ifс условиемwater > 20. В её блоке выведитеЭмма может полить всё поле. Программа выведет:Вёдер воды в колодце: 30 Эмма может полить всё поле - 2
Под её
endнапишите вторую инструкциюifс условиемwater < 10, которая выводитКолодец почти пуст. Запустите программу: она по-прежнему выводит только две строки, ведь 30 не меньше 10, поэтому второй блок пропускается. - 3
Замените
waterна5и запустите программу. Теперь первое условие ложно, а второе истинно, поэтому программа выведет:Вёдер воды в колодце: 5 Колодец почти пуст