Cykly a return v Lua
For
V lua existujú dva typy cyklov for a while. For sa
zapisuje takto
for <promena> = <odkdy>,<dokdy> do end:
for i = 1,3 do
print("ahoj svete")
end
Pozn. na rozdiel od C-like jazykov Lua začína od 1 nie od 0.
Vypíše do konzoly 3krát ahoj svete.
While
zápis: while <podmínka> do end
exit = 1 -- vytvoříme proměnou exit a dáme jí hodnotu 1
while not exit == 3 do -- cyklus zkontroluje jestli exit nemá hodnotu 3
print("ahoj svete") -- vypíše ahoj svete
exit = exit + 1 -- přičteme k exit 1
end
Pozn. Lua nepozná ++ ani --
Kalkulačka
Kalkulačku by teda išlo napísať aj s pomocou cyklu a to takto.
exit = false
while not exit do --Šlo by také napsat while not exit == true do ale v případě že proměnné přiřadíme logickou hodnotu true/false můžeme == vynechat.
print("první číslo")
cislo = io.read()
print("zadej druhé cislo")
cislo2 = io.read()
print("zadej operaci")
operace = io.read();
if operace == "+" then
print(cislo + cislo2)
elseif operace == "-" then
print(cislo - cislo2)
elseif operace == "*" then)
print(cislo * cislo2)
elseif operace == "/" then
print(cislo / cislo)
else --příkazy po else se provedou v případě že operace nesplňuje if ani žádný z elseif.
print("spatna operace")
end
print("chcete zadat další příklad ano/ne")
roz = io.read()
if roz == "ne" then
exit = true
end
end
Kalkulačka má však jednu chybu a to že nie je takzvane blbuvzdorný teda
že program spadne keď zadáte zlý vstup. Aby sme toho dosiahli a pritom
kalkulačku neznepřehlednily ukážeme si ďalšiu zaujímavú vec na
funkciách. Vytvoríme si funkciu ziskejvstup() ktorá bude vstup
validovať.
function ziskejvstup()
exit = false
while not exit do
vstup = io.read()
if not tonumber(vstup) == nil then -- Funkce tonumber je součástí standardních knihoven lua tedy ---je přístupná ve všech lua programech.
-- programu stejně jako standardní knihovna funkcí io ze které je funkce io.read().
-- tonumber se normálně používá v případě že je potřeba převést textový řetězec na číslo.
-- Ovšem díky tomu že vrací nil když se převod nepovede se dá použít k validaci vstupu.
print("nezadali jste číslo")
vystup() -- Tato funkce bude vysvětlena níže.
else
return tonumber(vstup)-- Vrátíme vstup převedený na číslo.
end
end
K validáciu vstupu operácie vytvoríme ďalšiu funkciu a ešte ďalšiu funkciu, ktorá umožní vystúpiť z programu po každom zlom vstupe.
function vystup()
print("byl zadán neplatný vstup")
print("chcete ukončit program? (Ano pro ukončeni cokoli pro pokračování.)")
vstup = io.read()
if vstup == "ano" then
os.exit(1)--ukončíme program s kódem 1 (program byl ukončen bez chyby).
end
end
function ziskejoperaci()
exit = false
while not exit do
vstup = io.read()
if vstup == "+" then
return "+"
elseif vstup == "-" then
return "-"
elseif vstup == "*" then
return "*"
elseif vstup == "/" then
return "/"
else
print("neznámá operace")
vystup()
end
end
end
Kalkulačka z tohto dielu potom vyzerá takto.
function vystup()
print("byl zadán neplatný vstup")
print("chcete ukončit program? (Ano pro ukončeni cokoli pro pokračování.)")
vstup = io.read()
if vstup == "ano" then
os.exit(1)--ukončíme program s kódem 1 (program byl ukončen bez chyby).
end
end
function ziskejoperaci()
exit = false
while not exit do
vstup = io.read()
if vstup == "+" then
return "+"
elseif vstup == "-" then
return "+"
elseif vstup == "*" then
return "*"
elseif vstup == "/" then
return "/"
else
print("neznámá operace")
vystup()
end
end
end
function ziskejvstup()
exit = false
while not exit do
vstup = io.read()
if not tonumber(vstup) == nil then -- Funkce tonumber je součástí standardních knihoven lua tedy je přístupná .
-- programu stejně jako standardní knihovna funkcí io ze které je funkce io.read().
-- tonumber se normálně používá v případě že je potřeba převést textový řetězec na číslo.
-- Ovšem díky tomu že vrací nil když se převod nepovede se dá použít k validaci vstupu.
print("nezadali jste číslo")
else
return tonumber(vstup)-- Vrátíme vstup převedený na číslo.
end
end
function main()
exit = false
while not exit do
print("zadejte první číslo")
cislo = ziskejvstup()
print("zadej druhe číslo")
cislo2 = ziskejvstup()
print("zadejte operaci")
operace = ziskejoperaci()
if operace == "+" then
print(cislo + cislo2)
elseif operace == "-" then
print(cislo - cislo2)
elseif operace == "*" then
print(cislo * cislo2)
elseif operace == "/" then
print(cislo / cislo2)
else
print("neznama operace")
vystup()
end
end
end
main();
Aby sme boli z funkciami hotoví ukážem ešte posledná vec a to argumenty.
function zvetsi(cislo,o)--dáme funkci argumenty cislo = cislo + o --argument je vlastně proměnná takže můžeme použít tohle. return cislo end
