Komentáře, proměnné a základ tabulek

Nyní se podíváme na velice důležitou část jazyka Lua. Tou jsou proměnné a komentáře. Už umíme vytvořit nový skript pro stroj, tak teď si tam přidáme nějakou promměnou a vypíšeme si ji. Celý postup si budeme komentovat.

Komentáře v Lua

V Lua existují stejně jako v jiných jazycích komentáře. Ty slouží k psaní poznámek ke kódu a lze do nich zapsat téměř cokoli co vás napadne. Lua rozlišuje tři typy komentářů.

  1. Řádkový komentář - tento komentář slouží k zakomentování jednoho řádku kódu - začíná dvojicí znaků pomlčky (--) a končí u prvního zalomení řádku (enteru)
  2. Blokový komentář - komentář který slouží k zakomentování většího kusu kódu/poznámky. Začíná sekvencí znaků --[[ a končí sekvencí znaků ]]. Lze využít také když chcete zakomentovat něco uprostřed řádku.
  3. Komentář pro dokumentaci - Lua podporuje konetář pro dokumentaci - některé programy jsou schopny ho vytáhnout a přepsat do textové podoby. Já osobně si myslím že pro naše účely je nepotřebný. Začíná znaky _=[[ a končí ]]

Ukázka komentářů v praxi a jejich využití (okolní kód je tam jen na ukázku a tvoří nekonečnou smyčku - nekopírujte ho!):

1--[[
2Hlavicka skriptu
3autor:
4datum vydani:
5zmeny:
6atd....
7
8komentar je na vice radku
9]]
10
11local i;
12local ahoj; -- radkový komentar nemusi zacinat jen na kraji radku
13while true do
14 -- komentar pro zakomentovani jen casti kodu
15 -- na radku - zaroven jsem vyuzil radkoveho
16 -- KOMENTARE - muze byt jen na jednom radku a zacina --
17 i = i --[[ + 5 ]] + 1;
18end;
19
20_=[[
21Komentar pro dokumentaci - u nas nepouzitelny
22chova se jako blokovy
23]]

Proměnné

Díky tomu, že je Lua tak odlehčená, podporuje jen málo datových typů.
Seznam těchto datových typů:

  1. Celé číslo (int/inteeger) - proměnná která uchovává celé číslo (např.: 1, 5, 1238864, 1531, -6410)

  2. Desetinné číslo (float) - desetinné číslo s dvojitou přesností. Příklad hodnot: 1.58, 8.68461, 5.87464 - používá se desetinná tečka

  3. Pravdivostní hodnota (bool) - hodnoty jsou pravda (true) nebo nepravda (false)

  4. Text (string) - Jakýkoli text uzavřený do dvojitých uvozovek ""

  5. Tabulka (table) - Snad nejvíce využívaný datový typ. Vytváří se přes ní objekty, seznamy, atd... Prakticky jde o vícesložkové pole hodnot (hodnotou může být další tabulka (pole))

Výhodou jazyka Lua je automatický správa paměti. Nemusíme deklarovat datový typ proměnné ani určovat kde bude. Proměnná automaticky mění svůj typ na základě hodnoty. Může nám to způsobit potíže, ovšem mnohem více převažují výhody. Všechny proměnné zavádíme pomocí klíčového slova local. Proměnná je k dispozici od místa definování pro všechny vnořené bloky (podmínky které jsou "níže" než deklarace apod.).

Název proměnné může být jakýkoli ale nesmí začínat číslicí a může se skládat pouze z písmen od A do Z, malých i velkých. Pod proměnnou si můžeme představit její hodnotu, kterou přiřazujeme pomocí rovnítka (=). Do pole (k takzvaným indexům) se přistupuje přes tečku (.). Takže například můžu napsat mojePole.index1. Ovšem v takovém případě index podléhá stejným pravidlům jako proměnná - proto, když se používají číselné indexy se používá hranatých závorek a čísla indexu v něm. Například: mojePole[5] mě dostane do pole mojePole na pátý prvek. Tyto vlastnosti lze kombinovat, ale o tom bude samostaný díl série.

Ukázka proměnných:

1--[[
2 Author: Martin Fabik
3 Date: 21.5.2015
4 version: 0.1
5 history: ahoj;
6]]--
7
8mujSkript = {};
9
10function mujSkript.prerequisitesPresent(specializations)
11 return true;
12end;
13
14function mujSkript:load(xmlFile)
15 local MojeMalaPromena = "moje hodnota";
16 local Promena2 = 5;
17 local Promena3 = 5.8946;
18 local mojePole = {};
19 mojePole[1] = 1874;
20 mojePole[2] = "text";
21 mojePole[3] = 9841.5645;
22 mojePole.textovyIndex = 1615;
23 mojePole.textovyIndex2 = 4968.6841;
24 mojePole.textovyIndex3 = "text";
25 print(MojeMalaPromena);
26 print(Promena3);
27 print(mojePole.textovyIndex);
28 print(mojePole.textovyIndex .. "- toto je hodnota promene mojePole.textovyIndex");
29 print(mojePole[1] .. "1");
30 -- toto je vypis - vim co dela
31 print("Nacetl jsme stroj!");
32end;
33
34function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)
35end;
36
37function mujSkript:keyEvent(unicode, sym, modifier, isDown)
38end;
39
40function mujSkript:update(dt)
41end;
42
43function mujSkript:updateTick(dt)
44end;
45
46function mujSkript:draw()
47end;

Ukázka používá funkci print která vypíše danou proměnnou/text v závorkách do logu. Dále je zde vidět spojování 2 textů - konkrétně řádky 28 a 29. Text je spojován operátorem .. - netextové proměnné jsou nejdříve převedeny na text a poté spojeny se zbytkem. Pokud byste chtěli, můžete si tento skript stáhnout a vyzkoušet sami.

Související video

Soubory ke stažení

  1. mujskript.lua