Co je pravda
Podmínka nemusí být porovnání. Za if můžete napsat jakoukoli hodnotu a Lua rozhodne, jestli platí jako pravda. Pravidlo Lua je krátké: false a nil platí jako nepravda a všechno ostatní jako pravda, i číslo 0 a prázdný text "":
if 0 then
print("0 platí jako pravda")
end
if "" then
print("Prázdný text platí jako pravda")
end
if nil then
print("nil platí jako pravda")
endVypíše:
0 platí jako pravda
Prázdný text platí jako pravdaTohle si dobře zapamatujte, zvlášť pokud znáte jiný jazyk: v Pythonu, JavaScriptu nebo C platí 0 jako nepravda. V Lua ne, a snadno se to splete:
local semena = 0
if semena then
print("Ema zasadí semínka")
else
print("Ema nemá žádná semínka")
endVypíše:
Ema zasadí semínkaEma žádná semínka nemá, ale 0 platí jako pravda. Když se chcete zeptat, jestli nějaká semínka jsou, porovnávejte: if semena > 0 then.
K čemu je tedy if semena then? Ptá se „má semena nějakou hodnotu?“, neboli „není to nil?“. To se hodí, protože některé funkce dávají nil, když se jim něco nepovede. Znáte tonumber: když text není číslo, dá nil:
local odpoved = "tucet"
local vejce = tonumber(odpoved)
if vejce then
print("Vejce: " .. vejce)
else
print("To není číslo: " .. odpoved)
endVypíše:
To není číslo: tucetS odpoved = "12" by vejce bylo 12 a program by vypsal Vejce: 12. not se řídí stejným pravidlem a vždy dává true, nebo false: not nil je true a not 0 je false. if not vejce then tedy znamená „pokud je vejce nil“ (nebo false).
Ještě jedna past: if semena == true then není totéž co if semena then. == porovnává přesně a číslo se nikdy nerovná pravdivostní hodnotě true, takže 5 == true je nepravda. == true prostě nepište.
Jak psát:
Pokyny
Spusťte program: vypíše Ema zasadí 0 semínek. Opravte podmínku tak, aby Ema sázela, jen když má víc než 0 semínek. Program pak vypíše:
Ema koupí nová semínkaDěda Josef napsal, kolik chce vajec, ale jako text, vzkaz. Na konci programu ho převeďte pomocí tonumber a výsledek uložte do lokální proměnné vejce. Pak napište příkaz if, jehož podmínka je jen vejce. Když má hodnotu, vypište Děda Josef chce 14 vajec (s číslem z vejce), jinak vypište Ema nepřečte vzkaz: a za tím vzkaz. Program vypíše:
Ema koupí nová semínka
Děda Josef chce 14 vajecZměňte vzkaz na "čtrnáct". tonumber slovo na číslo nepřevede, takže vejce je nil a program vypíše:
Ema koupí nová semínka
Ema nepřečte vzkaz: čtrnáctZačněte programovat zdarma
6/10