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
Hotovo

V 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")
end
Nepotkají se

S 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)
end
main.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
end
Den 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.)

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: trh

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

8/10