Děkujeme za vaši dotaz! Jeden z našich pracovníků vás brzy kontaktuje.
Děkujeme za rezervaci! Jeden z našich pracovníků vás brzy kontaktuje.
Návrh Školení
Úvod do Lua
- Kousek historie
- Cíle, funkce a nepodstatné cíle Lua
- Zdroje dokumentace a tutoriálů o Lua
- Instalace interpretu Lua
- Nastavení a použití LuaRocks
Základní syntaxe a sémantika
- Identifikátory
- Komentáře, blokové komentáře
- Globální proměnné a povinnost přidržování striktnosti
- Lokální proměnné
- Samostatné programy, argumenty programu
- Kompilační jednotky, části, výrazy, středník
Datové typy a datové struktury
- Základní typy: nil, boolean, number, string
- Objektové typy: function, userdata, thread, table
- Odkazy/objekty vs. základní hodnoty
- Důležitost tabulek v Lua
Úvod do tabulek a jejich univerzálnosti
- Tabulky jako asociativní pole
- Tabulky jako numerické pole, sekvence
Základní ovládací struktury
- if then elseif else end
- Cyklus while
- Cyklus repeat
- Jednoduchý cyklus for
Zpracování chyb
- Návratové hodnoty vs. výjimky
- Převod návratové hodnoty na výjimku
- Převod výjimky na návratovou hodnotu
- Úrovně chyb
Příklady programů
- Vyhodnocení polynomu
- Hledání v šířku
- Další cvičení
Více o funkcích
- Jmenované argumenty
- Orientace na objekty volání
- Closures
- Kurýrování (currying)
- Chvostová volání (tail calls)
- Více přiřazení a návratů
- Varargs
Iterátory a ko-rutiny
- Generický cyklus for
- Bezstavové vs. stavové iterátory
- Rozdíly mezi iterátory a ko-rutinami
Metatabulky a metody
- Příklad s množinou
- Metoda __tostring
- Aritmetické metody
- Metody __index, __newindex
- Metoda __len
Moduly a balíčky
- Použití modulů
- Vytváření modulů
- Organizace modulů do balíčků
Pokročilé tabulky
- Tabulky pro fronty a zásobníky
- Tabulky popisující grafy
- Maticové tabulky
- Spojové seznamy jako tabulky
- Přidané bufferování
Metatabulky přes příklady
- Proxies
- Pouze pro čtení (readonly)
- Paměťové optimalizace (memoization)
- Dynamické programování s memoizací
- Příklad Fibonacciho posloupnosti
Prostředí
- Vztah mezi globálními proměnnými a prostředími
- Svobodné proměnné
- Tabulka _ENV a tabulka _G
Více o modulích
- Různé přístupy k vytváření modulů
- Moduly měnící chování
- Inicializace a argumenty modulů
- Použití prostředí pro implementaci bezpečných modulů
Pokročilé iterátory a ko-rutiny
- Výrobce, spotřebitel, filtr
- Obalování ko-rutin pro získání iterátorů
- Bezstavový iterátor pro spojové seznamy
Přispívání do ekosystému
- Nahrávání balíčků na MoonRocks
Funkcionální paradigmata v Lua
- Funkce map
- Funkce reduce / fold
Orientace na objekty (OOP)
- Různé přístupy k OOP
- Různé přístupy ke dědičnosti
- Příklady
Krok za krokem procházení standardních knihoven Lua
Kompilace
- Kompilace
- Evaluace (eval)
- Vztah s prostředím
- Binární části (chunks)
Sběr smetí (garbage collection)
- Slabé tabulky
- Finalizátory, metoda __gc
Bytekód a virtuální stroj Lua
- Vytváření bytekódu z zdrojového kódu
- Čtení a analýza bytekódu
- Rychlý přehled zdrojového kódu Lua VM
C moduly
- Volání C ze Lua
- Hledací cesta a načítání C modulů
Volání Lua z C
- Zásobník (stack)
- Zpracování chyb
- Kontinuace (continuations)
Zpracování hodnot a typů Lua z C
- Pole (arrays)
- Řetězce (strings)
- Userdata
- Metatabulky
- Orientace na objekty volání
- Léhce zpracovávané userdata (light userdata)
Správa paměti
- Alokátory (allocators)
- API pro sběr smetí (GC API)
Vlákna v Lua
- Ko-rutiny vs. vlákna
- Přesné vícevláknové programování a stavy Lua
Požadavky
Znalost alespoň jednoho dalšího programovacího jazyka. Programming zkušenost. Volitelně, pokud znáte jiné skriptovací jazyky, usnadní to pochopení Lua.
21 hodiny