Вложенные условия
Блок может содержать любой код, в том числе другую инструкцию if. if внутри блока другого if называется вложенным условием. Оно удобно, когда один вопрос имеет смысл только после другого. Перед посадкой Эмма сначала проверяет, есть ли у неё семена, и только потом смотрит на погоду:
local hasSeeds = true
local weather = "солнечно"
if hasSeeds then
if weather == "дождливо" then
print("Эмма сажает, и дождь поливает семена")
else
print("Эмма сажает и поливает семена")
end
else
print("Сначала Эмма покупает семена")
endПрограмма выведет:
Эмма сажает и поливает семенаВнутренний if выполняется, только когда hasSeeds истинно. Его блоки сдвинуты ещё на 4 пробела, то есть всего на 8, а каждый else и end стоит с таким же отступом, как if, к которому он относится. Но сам Lua на отступы не смотрит: каждый end закрывает ближайший ещё не закрытый if. Первый end закрывает внутренний if, второй — внешний if. Если здесь забыть внутренний end, Lua сообщит main.lua:8: 'end' expected (to close 'if' at line 4) near 'else': перед else на строке 8 нужно было закрыть if со строки 4.
Вложенные условия часто можно записать с помощью and и elseif. Этот код делает то же самое:
local hasSeeds = true
local weather = "солнечно"
if hasSeeds and weather == "дождливо" then
print("Эмма сажает, и дождь поливает семена")
elseif hasSeeds then
print("Эмма сажает и поливает семена")
else
print("Сначала Эмма покупает семена")
endПрограмма выведет:
Эмма сажает и поливает семенаПрограмма доходит до elseif hasSeeds, только когда первое условие ложно. А если семена есть, это значит, что дождя нет. Ни один способ не неправильный: выбирайте тот, который легче читать. Но когда ни у одного из if нет else, один if с and почти всегда понятнее: if hasSeeds and weather == "дождливо" then вместо двух инструкций if и двух end.
Задание
- 1
На рынке Эмма продаёт коробку яиц, если у неё не меньше 12 яиц, а иначе только молоко от коровы Беллы. Внутри блока
if, под егоprint, добавьте вложенную инструкциюif: еслиeggsне меньше12, выведитеОна продаёт коробку яиц, а иначе выведитеОна продаёт только молоко. Программа выведет:День: суббота, яиц: 8 Эмма идёт на рынок Она продаёт только молоко - 2
Замените
eggsна20и запустите программу. Теперь истинны оба условия:День: суббота, яиц: 20 Эмма идёт на рынок Она продаёт коробку яиц