Vnořené podmínky
Blok může obsahovat jakýkoli kód, i další příkaz if. Příkazu if v bloku jiného příkazu if se říká vnořená podmínka. Hodí se, když jedna otázka dává smysl až po jiné. Než Ema začne sázet, zjistí nejdřív, jestli má semínka, a teprve potom se dívá na počasí:
local maSemena = true
local pocasi = "slunečno"
if maSemena then
if pocasi == "déšť" then
print("Ema sází a semínka zalije déšť")
else
print("Ema sází a semínka zalévá")
end
else
print("Ema si nejdřív koupí semínka")
endVypíše:
Ema sází a semínka zaléváVnitřní příkaz if se provede, jen když je maSemena pravda. Jeho bloky jsou odsazené o další 4 mezery, celkem o 8, a každé else a end je odsazené stejně jako if, ke kterému patří. Lua se ale na odsazení nedívá: každé end uzavře nejbližší if, který je ještě otevřený. První end uzavře vnitřní if, druhé vnější. Když tady vnitřní end zapomenete, Lua ohlásí main.lua:8: 'end' expected (to close 'if' at line 4) near 'else': před else na řádku 8 měl být if z řádku 4 uzavřený.
Vnořené podmínky se často dají napsat i pomocí and a elseif. Tento kód dělá totéž:
local maSemena = true
local pocasi = "slunečno"
if maSemena and pocasi == "déšť" then
print("Ema sází a semínka zalije déšť")
elseif maSemena then
print("Ema sází a semínka zalévá")
else
print("Ema si nejdřív koupí semínka")
endVypíše:
Ema sází a semínka zaléváK elseif maSemena se program dostane, jen když je první podmínka nepravdivá. Se semínky to znamená, že neprší. Ani jeden způsob není špatný: vyberte ten, který se čte lépe. Když ale ani jeden z obou příkazů if nemá else, je jediný if s and skoro vždy přehlednější: if maSemena and pocasi == "déšť" then místo dvou příkazů if a dvou end.
Jak psát:
Pokyny
Na trhu Ema prodá krabici vajec, pokud jich má aspoň 12, a jinak jen mléko od krávy Belly. Do bloku příkazu if pod jeho print přidejte vnořený příkaz if: pokud je vejce aspoň 12, vypište Prodá krabici vajec, jinak vypište Prodá jen mléko. Program vypíše:
Den: sobota, vejce: 8
Ema jede na trh
Prodá jen mlékoZměňte vejce na 20 a spusťte program. Teď jsou pravdivé obě podmínky:
Den: sobota, vejce: 20
Ema jede na trh
Prodá krabici vajecZačněte programovat zdarma
8/10