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ářů.
- Řá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)
- 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.
- 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 skriptu3autor:4datum vydani:5zmeny:6atd....78komentar je na vice radku9]]1011local i;12local ahoj; -- radkový komentar nemusi zacinat jen na kraji radku13while true do14 -- komentar pro zakomentovani jen casti kodu15 -- na radku - zaroven jsem vyuzil radkoveho16 -- KOMENTARE - muze byt jen na jednom radku a zacina --17 i = i --[[ + 5 ]] + 1;18end;1920_=[[21Komentar pro dokumentaci - u nas nepouzitelny22chova se jako blokovy23]]
Proměnné
DÃky tomu, že je Lua tak odlehÄená, podporuje jen málo datových typů.
Seznam těchto datových typů:
Celé ÄÃslo (int/inteeger) - promÄ›nná která uchovává celé ÄÃslo (napÅ™.: 1, 5, 1238864, 1531, -6410)
Desetinné ÄÃslo (float) - desetinné ÄÃslo s dvojitou pÅ™esnostÃ. PÅ™Ãklad hodnot: 1.58, 8.68461, 5.87464 - použÃvá se desetinná teÄka
Pravdivostnà hodnota (bool) - hodnoty jsou pravda (true) nebo nepravda (false)
Text (string) - Jakýkoli text uzavřený do dvojitých uvozovek ""
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 Fabik3 Date: 21.5.20154 version: 0.15 history: ahoj;6]]--78mujSkript = {};910function mujSkript.prerequisitesPresent(specializations)11 return true;12end;1314function 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 dela31 print("Nacetl jsme stroj!");32end;3334function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)35end;3637function mujSkript:keyEvent(unicode, sym, modifier, isDown)38end;3940function mujSkript:update(dt)41end;4243function mujSkript:updateTick(dt)44end;4546function 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.