Ветка else
Инструкция if выполняет свой блок, только когда условие истинно. Часто нужно что-то сделать и тогда, когда оно ложно. Для этого есть else («иначе»):
local weather = "облачно"
if weather == "дождливо" then
print("Поле поливает дождь")
else
print("Эмма поливает поле")
endПрограмма выведет:
Эмма поливает полеУсловие ложно, поэтому программа пропускает первый блок и выполняет блок после else. Два блока называются ветками: как дорога, которая разделяется надвое, программа всегда выбирает ровно одну из них. Она никогда не выполняет обе и никогда не пропускает обе.
else стоит на отдельной строке, с таким же отступом, как у его if, а вся инструкция по-прежнему заканчивается одним end. У else нет ни условия, ни then: он берёт на себя все случаи, которые не подошли для if. Если всё же написать условие, как в else weather ~= "дождливо" then, Lua сообщит syntax error near '~='.
Часто ветки задают значение переменной. Создайте переменную до if, а в ветках только меняйте её:
local weather = "солнечно"
local buckets
if weather == "солнечно" then
buckets = 12
else
buckets = 4
end
print("Вёдер воды: " .. buckets)Программа выведет:
Вёдер воды: 12local buckets без значения создаёт переменную со значением nil, а одна из веток потом кладёт в неё число. Не пишите local ещё раз внутри веток. Переменная, созданная с local внутри блока, существует только до конца этого блока:
local weather = "солнечно"
if weather == "солнечно" then
local buckets = 12
end
print("Вёдер воды: " .. buckets)main.lua:5: attempt to concatenate a nil value (global 'buckets')После end переменной buckets из блока уже нет. Тогда Lua ищет глобальную переменную с именем buckets, не находит её и получает nil, как и при опечатке в имени.
Задание
- 1
Запустите программу: она выводит погоду, а потом завершается с ошибкой, потому что в несолнечную погоду
bucketsостаётсяnil. Добавьте веткуelse, которая задаётbucketsравным4. Тогда программа выведет:Погода: дождливо Вёдер воды: 4 - 2
Замените
weatherна"солнечно"и запустите программу ещё раз. Теперь условие истинно, поэтому программа идёт по первой ветке и выводит:Погода: солнечно Вёдер воды: 12