Příkaz break
Někdy nemusíte projít celý cyklus. Když něco hledáte a najdete to, nemá smysl hledat dál. Příkaz break cyklus okamžitě ukončí a program pokračuje za jeho end.
Obchodník Hugo přijíždí každý druhý den a každý třetí den prší. Kdy Hugo poprvé přijede v dešti? Cyklus vypisuje každý den, který kontroluje, takže uvidíte, kde se zastaví:
for den = 1, 30 do
print("Kontroluji den " .. den)
if den % 2 == 0 and den % 3 == 0 then
print("Hugo přijede v dešti v den " .. den)
break
end
end
print("Hotovo")Kontroluji den 1
Kontroluji den 2
Kontroluji den 3
Kontroluji den 4
Kontroluji den 5
Kontroluji den 6
Hugo přijede v dešti v den 6
HotovoV den 6 podmínka platí. Program vypíše výsledek a break cyklus ukončí: dny 7 až 30 se už nekontrolují a program pokračuje řádkem print("Hotovo"). Bez break by cyklus doběhl až do dne 30 a ohlásil by i dny 12, 18, 24 a 30.
break skoro vždycky patří dovnitř if; samotný by ukončil cyklus hned v prvním průchodu. Funguje stejně v cyklech while, for i repeat. V programech v Lua uvidíte i while true do: cyklus, jehož podmínka platí pořád. Sám by nikdy neskončil, takže v něm někde musí být if s break.
Abyste i za cyklem věděli, co jste našli, uložte to do proměnné vytvořené před cyklem. Když cyklus nic nenajde, zůstane v proměnné nil a if to pozná. Děda Josef chodí na návštěvu každý čtvrtý den a Hugo jezdí každý šestý. Potkají se během prvních 10 dní?
local setkani
for den = 1, 10 do
if den % 4 == 0 and den % 6 == 0 then
setkani = den
break
end
end
if setkani then
print("Potkají se v den " .. setkani)
else
print("Nepotkají se")
endNepotkají seS for den = 1, 20 do by program vypsal Potkají se v den 12.
Lua nemá continue. V mnoha jazycích continue přeskočí zbytek průchodu a pokračuje dalším. Lua ho nezná: považuje continue za název proměnné a pak zakopne o end za ním. Program se ani nespustí:
for den = 1, 4 do
if den == 2 then
continue
end
print("Den " .. den)
endmain.lua:4: syntax error near 'end'Zbytek bloku místo toho dejte do if s opačnou podmínkou:
for den = 1, 4 do
if den ~= 2 then
print("Den " .. den)
end
endDen 1
Den 3
Den 4(Lua má ještě goto, kterým se dá skočit na konec bloku, ale v tomto kurzu ho potřebovat nebudete. Luau z Robloxu continue má, standardní Lua ne.)
Jak psát:
Pokyny
Ema má 40 mincí a každý den vydělá dalších 15, jak ukazuje cyklus. Do cyklu pod řádek, který vypisuje mince, přidejte if, který vypíše Den 8: Ema kupuje vozík! (s číslem dne), když má Ema aspoň 150 mincí. Spusťte program: hláška se objeví každý den od osmého dál, ale Ema potřebuje jen jeden vozík. Mezi řádky najdete:
Den 8: 160 mincí
Den 8: Ema kupuje vozík!Do bloku if za výpis přidejte break, aby se cyklus zastavil v den, kdy Ema vozík koupí. Poslední dva řádky výpisu cyklu pak budou:
Den 8: 160 mincí
Den 8: Ema kupuje vozík!Pod cyklus napište další cyklus pro Emin stánek na trhu. Je otevřený ve dnech 1 až 10, ale ne v deštivých dnech, a to je každý třetí den. Pro každý den, kdy je otevřeno, vypište jeden řádek. Lua nemá continue, takže použijte if. Výpis skončí takto:
Den 1: trh
Den 2: trh
Den 4: trh
Den 5: trh
Den 7: trh
Den 8: trh
Den 10: trhZačněte programovat zdarma
8/10