Gratulujeme!

Gratulujeme, váš program funguje a jste na konci kurzu Lua! Ema začala sezónu s 30 mincemi a osela tři záhony. Kdykoli Hugo platil víc než trh, prodala úrodu jemu a zbytek odvezla na trh. Sezónu skončila se 174 mincemi. A každý řádek programu jste napsali sami.

Poslední vylepšení. Ema chce vyzkoušet novou plodinu: rajčata. Ve vašem programu to znamená dva nové řádky dat, záznam v seznamu plodiny a položku v seznamu plan, a nic víc. Ceník, setí, růst, stodola, Hugo i trh pracují s tím, co je v seznamech, takže si rajčata najdou místo všude sama. Sledujte i mince: semínka rajčat stojí přesně těch 6 mincí, které Emě zbyly, a díky <= je koupit může.

Co jste se naučili. Podívejte se, jak si v programu našla místo každá lekce kurzu:

  • Základy Lua: print, program, který běží shora dolů, a komentáře, které ho dělí na části. Když se něco pokazilo, chybová hláška vám řekla, na kterém řádku.
  • Proměnné a typy: lokální proměnné jako mince a celá čísla, která vypíše %d. S desetinným číslem jako 3.5 by %d skončilo chybou.
  • Podmínky rozhodují, jestli má Ema dost mincí, jestli je záhon zralý, jestli Hugo platí víc než trh a jestli je co vypsat.
  • Cykly procházejí plán, dny a záhony, cyklus v cyklu. for priplatek = 2, 0, -1 počítá dolů a while true v Hugově scénáři není nekonečný, protože se u každého yield zastaví.
  • Tabulky jako seznamy drží plodiny, plán, záhony i počasí. table.insert do nich přidává, #zahony je počítá, table.concat spojuje texty a table.sort je řadí.
  • Funkce dělí program na části s jasnými úkoly: najdiPlodinu hledá, serazeneNazvy řadí a prodej vypisuje a vrací mince. Díky výchozím hodnotám parametrů fungovalo dál i staré volání prodej(stodola).
  • Tabulky jako slovníky: každá plodina je záznam, rust[dnes] vyhledá počasí a stodola počítá úrodu podle názvů. Klíče s háčky a čárkami se píšou do hranatých závorek, ["déšť"], protože Lua v názvech zná jen písmena bez diakritiky. A protože pairs nemá pořadí, klíče se před vypsáním řadí.
  • Řetězce: string.format skládá řádky pomocí %s a %d a .. spojuje zbytek. Texty s háčky a čárkami, třeba "dýně", se dají bez obav vypisovat i spojovat.
  • Objekty a metatabulky: třída Zahon drží data a metody záhonu pohromadě. __index najde metody, zahon:roste() předá záhon jako self a __tostring z něj udělá mrkev 2/3.
  • Korutiny: Hugův scénář se zastaví u coroutine.yield a další den pokračuje uprostřed svého cyklu, s proměnnými, jak je nechal.

Lua ve vašem počítači. Tady programy spouštěl váš prohlížeč. Jinde je můžete spouštět několika způsoby:

  • Online, bez instalace: na oficiální ukázce lua.org/demo.html si Lua 5.4 vyzkoušíte přímo z prohlížeče. Vložte do ní program a spusťte ho.
  • macOS: pomocí Homebrew nainstalujete Lua v Terminálu příkazem brew install lua. Program uložte jako main.lua a v jeho složce ho spusťte příkazem lua main.lua.
  • Ubuntu a Debian: Lua nainstalujete příkazem sudo apt install lua5.4 a program spustíte příkazem lua5.4 main.lua.
  • Windows: stáhněte si hotové soubory Lua ze stránek LuaBinaries. Program se jmenuje lua54.exe, takže svůj program spustíte příkazem lua54 main.lua.

Programy pište v editoru, který rozumí jazyku Lua, třeba ve Visual Studio Code s rozšířením „Lua“ od autora sumneko (Lua Language Server). Chyby označuje už při psaní, ještě než program spustíte.

Chybové hlášky jsou stejné jako tady, jen se dvěma drobnými rozdíly: první řádek začíná názvem příkazu, třeba lua: , a výpis pod stack traceback: končí řádkem [C]: in ?. Například když má plán překlep, příkaz lua main.lua vypíše tohle:

lua: main.lua:101: attempt to index a nil value (local 'plodina')
stack traceback:
	main.lua:101: in main chunk
	[C]: in ?

Příbuzní jazyka Lua. Naučili jste se standardní Lua 5.4. Potkáte ale i příbuzné jazyky:

  • Luau, jazyk Robloxu, vyrostl z Lua 5.1. Má věci, které standardní Lua nemá: mince += 5 a podobné, continue v cyklech, texty s hodnotami ve zpětných apostrofech, `Mince: {mince}`, a nepovinné typy, local mince: number = 5. Všechna čísla jsou v něm desetinná, takže print(10 / 2) vypíše 5. A hry v Robloxu používají kromě jazyka, který znáte, i vlastní objekty Robloxu, jako game, workspace a události.
  • LuaJIT je velmi rychlá verze Lua 5.1, kterou používá herní engine LÖVE, Defold i Neovim. Lua 5.1 nemá // a nerozlišuje celá a desetinná čísla.
  • Doplňky do World of Warcraft používají Lua 5.1 a PICO-8 malý jazyk podobný jazyku Lua.

Co dál. Teď znáte Lua od print až po metatabulky a korutiny. Pár nápadů, co dělat dál:

  • Vylepšujte svůj program. Děda Josef by mohl být druhý obchodník s vlastní korutinou a Ema by prodávala tomu, kdo platí víc. Sezóna by mohla být delší, záhon by mohl dostat metodu zahon:jeZraly() a ve vašem počítači může být počasí náhodné, pomocí math.random: tam žádný test nepotřebuje pokaždé stejný výstup. Nejvíc se naučíte, když řešíte vlastní problémy.
  • Hry v LÖVE. LÖVE je bezplatný engine pro 2D hry a celou hru v něm píšete v Lua: co se stane v každém snímku, co se vykreslí a co udělá stisk klávesy.
  • Roblox Studio. Hry pro Roblox se píšou v Luau, v Roblox Studiu. Skoro všechno z tohoto kurzu tam funguje a přidáte k tomu objekty a události Robloxu.
  • Neovim. Textový editor Neovim se nastavuje a rozšiřuje v Lua, takže pro něj teď můžete psát vlastní nastavení a doplňky.
  • Příručka Lua. Referenční příručka Lua 5.4 popisuje celý jazyk a všechny jeho funkce (anglicky). A kniha Programming in Lua od Roberta Ierusalimschyho, jednoho z autorů Lua, ho vysvětluje do hloubky.

A pokud si chcete vyzkoušet další jazyk, čekají na vás kurzy Pythonu, JavaScriptu a C.

Pokyny

Na konec seznamu plodiny přidejte rajčata: {nazev = "rajčata", dny = 4, cenaSemen = 2, cena = 7}. A na konci seznamu plan chce Ema 3 semínka rajčat: {nazev = "rajčata", seminka = 3}. Nic jiného neměňte. Program pak vypíše všechno ze začátku lekce:

CENÍK
mrkev: semínko za 2, prodej za 5
dýně: semínko za 5, prodej za 20
jahody: semínko za 4, prodej za 12
pšenice: semínko za 1, prodej za 3
rajčata: semínko za 2, prodej za 7
Záhon 1: mrkev x4 za 8 mincí
Záhon 2: pšenice x6 za 6 mincí
Záhon 3: dýně x2 za 10 mincí
Na jahody x2 nemá Ema dost mincí
Záhon 4: rajčata x3 za 6 mincí
Mince: 0
Den 1 (slunečno): mrkev 1/3, pšenice 1/2, dýně 1/6, rajčata 1/4
Den 2 (slunečno): mrkev 2/3, pšenice 2/2, dýně 2/6, rajčata 2/4
Hugo: pšenice 6 x 4 = 24
Den 3 (déšť): mrkev 3/3, pšenice 2/2, dýně 4/6, rajčata 4/4
Den 4 (zataženo): mrkev 1/3, pšenice 1/2, dýně 5/6, rajčata 1/4
Hugo: mrkev 4 x 7, pšenice 6 x 5, rajčata 3 x 9 = 85
Den 5 (slunečno): mrkev 2/3, pšenice 2/2, dýně 6/6, rajčata 2/4
Hugo: dýně 2 x 21, pšenice 6 x 4 = 66
Den 6 (zataženo): mrkev 3/3, pšenice 1/2, dýně 1/6, rajčata 3/4
Trh: mrkev 4 x 5 = 20
Konec sezóny: 195 mincí

Pokud rajčata záhon nedostanou, zkontrolujte podmínku pro nákup semínek: Emě zbylo přesně 6 mincí a to stačí.

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

7/7