Čtení chyb
Chyby k programování patří. Dělají je i zkušení programátoři, a to každý den. Důležité je umět je rychle najít a opravit, a s tím vám pomůžou chybové hlášky. V Lua existují dva druhy chyb a jejich hlášky vypadají trochu jinak.
Chyby syntaxe. Než Lua program spustí, přečte si ho celý a zkontroluje, že je napsaný podle pravidel jazyka, tedy podle jeho syntaxe. Když najde chybu, třeba chybějící uvozovku, program vůbec nespustí, ani řádky před chybou. V tomto programu chybí na řádku 2 uvozovka:
print("Dobré ráno, Emo!")
print("Nakrmit slepice)
print("Podojit Bellu")Výstup zůstane prázdný a pod ním se červeně objeví chybová hláška:
main.lua:2: unfinished string near '"Nakrmit slepice)'Čtěte ji zleva:
main.luaje název souboru s programem. Na tomto webu se program v editoru vždycky jmenujemain.lua.2je číslo řádku s chybou. Čísla řádků vidíte v editoru vlevo.- Za druhou dvojtečkou následuje anglický popis chyby.
unfinished stringznamená neukončený text (řetězec).near(poblíž) ukazuje místo, kde se problém projevil: u textu, který začíná"Nakrmit slepice). Chybí mu koncová uvozovka, a tak pokračuje až do konce řádku a závorka)se stala jeho součástí.
Hláška ukazuje, kde se chyba projevila, a to nemusí být místo, kde opravdu je. Když chybí uzavírací závorka, pozná to Lua až na dalším řádku:
print("Dobré ráno, Emo!"
print("Nakrmit slepice")Lua ohlásí:
main.lua:2: ')' expected (to close '(' at line 1) near 'print'')' expected znamená, že Lua čekala ), a (to close '(' at line 1) říká, kterou závorku má uzavřít: tu na řádku 1. Když tedy řádek z hlášky vypadá v pořádku, podívejte se na řádek nad ním. A když Lua dojde na konec programu a pořád na něco čeká, končí hláška slovy near <eof>: eof je z anglického end of file, konec souboru.
Chyby za běhu. Program bez chyb syntaxe se spustí a Lua provádí jeden řádek za druhým. Když narazí na příkaz, který provést nejde, zastaví se. Co program do té doby vypsal, ve výstupu zůstane a chybová hláška se objeví pod tím:
print("Dobré ráno, Emo!")
print("Nakrmit slepice")
prnt("Podojit Bellu")
print("Zalít mrkev")Program vypíše první dva řádky a za nimi následuje červená chybová hláška:
Dobré ráno, Emo!
Nakrmit slepice
main.lua:3: attempt to call a nil value (global 'prnt')
stack traceback:
main.lua:3: in main chunkPrvní řádek hlášky má stejné části jako předtím: soubor, řádek (3) a popis. attempt to call a nil value (global 'prnt') znamená, že se program pokusil zavolat něco, co se jmenuje prnt, ale nic (nil) takového neexistuje. print Lua zná, prnt ne. Když uvidíte attempt to call a nil value, hledejte překlep v názvu, třeba prnt nebo Print.
Pod tím stack traceback: vypisuje, kudy program procházel, když chyba nastala, od nejnovějšího místa. main.lua:3: in main chunk znamená řádek 3 v hlavní části vašeho programu. Až budou mít vaše programy vlastní funkce, bude tenhle seznam delší a ukáže, která funkce volala kterou. Zatím vám stačí první řádek hlášky. Řádek výpisu, který začíná [C]:, patří k samotnému jazyku Lua (ten je napsaný v jazyce C) a můžete ho přeskočit.
Hlášky, na které budete často narážet:
unfinished string: chybí uvozovka na konci textu, nebo se uvozovky na začátku a na konci liší, třeba"Ahoj'.')' expected: chybí závorka, nebo slova nejsou v uvozovkách:print(Ahoj Emo)skončí hláškou')' expected near 'Emo'.attempt to call a nil value: překlep v názvu funkce.attempt to add a 'string' with a 'number':+místo..při spojování textu a čísla.
Opravte vždy první chybu, kterou Lua ohlásí, a program spusťte znovu. Chyba syntaxe může zakrývat další chyby, protože dokud ji neopravíte, nespustí se nic. A chyba za běhu program zastaví, takže řádky pod ní se ještě vůbec nevyzkoušely.
Jak psát:
Pokyny
Emin večerní přehled v editoru má tři chyby. Spusťte program a přečtěte si chybovou hlášku: na kterém řádku je chyba a co je špatně? Opravte ji a program spusťte znovu. Opakujte to, dokud program nevypíše:
Večerní přehled
Vejce dnes: 12
Mléko: 12 litrů
Mince: 60
Zítra: déšť
Dobrou noc, Rexi!Začněte programovat zdarma
6/7