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")
end

Vypíše:

0 platí jako pravda
Prázdný text platí jako pravda

Tohle 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")
end

Vypíše:

Ema zasadí semínka

Ema žá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)
end

Vypíše:

To není číslo: tucet

S 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.

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ínka

Dě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 vajec

Změň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áct

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

6/10