PodmÃnky a operátory
Jedna z dalÅ¡Ãch, velmi důležitých Äástà každého jazyka. V každém skriptu naleznete podmÃnky a operátory. PodmÃnky se použÃvajà k vÄ›tvenà programu na základÄ› nÄ›jakého výrazu. Operátory pak porovnávajà napÅ™. dvÄ› promÄ›nné a tak vznikne daný výraz, který se použije v podmÃnce.
PodmÃnky
V jazyce lua zaÄÃná podmÃnka, stejnÄ› jako jinde, klÃÄovým slovem if. Vytvářà blok pÅ™Ãkazů který je ukonÄen klÃÄovým slovem end. PÅ™esná syntaxe uvozenà je if {výraz} then tady nÄ›jaký kód v podmÃnce end. Od klÃÄového slova then po end je kód v podmÃnce a je tedy provádÄ›n pouze pokud je splnÄ›n výraz. Zde je názorný pÅ™Ãklad:
1local promenna = 5;2-- toto se provede vzdy3if promenna == 5 then4 -- toto se provede jen pokud je promenna 55 -- protoze promenna je opravdu 5, tak se to tu provede6end;7-- toto se provede taky vzdy
Na tomto pÅ™Ãkladu je snad dostateÄnÄ› vidÄ›t, kdy se co spouÅ¡tà a jak jednoduchá podmÃnka vypadá. Nynà se podÃváme na podmÃnky i s druhou vÄ›tvà kódu - tedy ty, které majà vymezený kód pro splnÄ›nou podmÃnku a pro nesplnÄ›nou podmÃnku. Druhá vÄ›tev se vytvořà tak, že pÅ™ed klÃÄové slovo end - tedy pÅ™ed ukonÄenÃm celé podmÃny - vložÃme klÃÄové slovo else. Toto klÃÄové slovo nám rozdÄ›là podmÃnku na dvÄ› vÄ›tve - prvnà je urÄena pro kód pÅ™i splnÄ›né podmÃnce a ta druhá je pro nesplnÄ›nou podmÃnku. Ukázka takové podmÃnky:
1local promenna = 5;2-- toto se provede vzdy3if promenna == 5 then4 -- toto se provede jen pokud je promenna 55 -- protoze promenna je opravdu 5, tak se to tu provede6else7 -- toto by se provedlo pokud by nebyla promenna 58end;9-- toto se provede taky vzdy
Pozor! PodmÃnka je vyhodnocována pouze jednou, takže pokud zmÄ›nÃte hodnotu výrazu, už se neprovede vÄ›tev napÅ™. else, i když je opticky pozdÄ›ji. Zde vidÃme podmÃnku s dvÄ›ma vÄ›tvema. Ale co když potÅ™ebuji porovnávat možnostà vÃce? V takovém pÅ™ÃpadÄ› se nám nabÃzà klÃÄové slovo elseif, které zajistà pÅ™idánà dalÅ¡Ã vÄ›tve do podmÃnky. PÅ™idává se mezi poÄáteÄnà if a pÅ™Ãpadný end. Pokud je v podmÃnce else tak jeÅ¡tÄ› pÅ™ed nÄ›j. Struktura elseif je stejná jako u if.
Ukázka kódu s použitÃm elseif:
1-- Zapis 1 (s elseif):23local promenna = 5;4if promenna == 1 then5 -- kod pokud je promenna = 16elseif promenna == 2 then7 -- kod pokud je promenna = 289 -- atd az do:10elseif promenna == 5 then11 -- kod pro hodnotu promenne 512else13 -- vsechny jine neunikatni hodnoty14end;1516-- vyuziti u nenaplnenich podminek17if ridici == nil then18 ridici = true;19elseif ridici then20 -- kod pokud je ridici true21else22 -- moznosti jsou true, nil a false23 -- takhle pokryji vsechny24end;
Zde je ukázka použità podmÃnek elseif pro různá ÄÃsla, a nebo pro oÅ¡etÅ™enà stavu, kdy promÄ›nná neobsahuje žádnou hodnotu (nil - nebyla deklarovana a nebo neni naplnena hodnotou). Nynà uvedu pÅ™Ãklad kdy je podmÃnka složená do sebe (výsledek bude stejný jako u elseif). RozdÃl mezi použitÃm elseif a tÃmto způsobem je ve složitosti kontrukce. PosuÄte sami:
1-- Zapis 2 - slozene podminky23local promenna = 5;4if promenna == 1 then5 -- kod pokud promenna = 16else7 if promenna == 2 then8 -- kod pokud promenna = 29 else10 if promenna == 3 then11 -- kod pokud promenna = 312 else13 -- takto to pokracuje do pozadovane hodnoty14 -- koncime nejak takto15 if promenna == 5 then16 -- kod pro promenna = 517 else18 -- vic nez 5 nepotrebuju19 -- uz zde bude jen finalni kod20 -- pro vse ostatni21 end;22 end;23 end;24end;
VÅ¡imnÄ›te si zbyteÄné složitosti a nepÅ™ehlednosti kódu. Velmi doporuÄuji použÃvat elseif.
Operátory
DalÅ¡Ãm velmi důležitým tématen v každém programovacÃm jazyce jsou operátory. Tato Äást je spojená a podmÃnkami, protože operátory se použÃvajà k vyhodnocovánà podmÃnek. S jednÃm operátorem jsme se setkali v pÅ™Ãkladech podmÃnek - a to dvojici rovnÃtek ==. Uvedu zde pÅ™ehled porovnávacÃch operátorů a rovnou je popÃÅ¡u.
Operátor | Funkce |
---|---|
< | Operátor pro porovnánà dvou hodnot. Výsledkem je true pokud je levá strana hodnotou menÅ¡Ã než pravá. Lze použÃt na ÄÃsla. |
> | Operátor pro porovnánà dvou hodnot. Výsledkem je true pokud je pravá strana hodnotou menÅ¡Ã než levá. Lze použÃt na ÄÃsla. |
<= | Operátor pro porovnánà dvou hodnot. Výsledkem je true pokud je levá strana hodnotou menÅ¡Ã nebo rovna pravé. Lze použÃt na ÄÃsla. |
>= | Operátor pro porovnánà dvou hodnot. Výsledkem je true pokud je pravá strana hodnotou menÅ¡Ã nebo rovna levé. Lze použÃt na ÄÃsla. |
== | Operátor pro porovnánà dvou hodnot. Výsledkem je true pokud je pravá strana rovna levé. Lze použÃt na ÄÃsla (ale ne desetinné kvůli toleranci) a na cokoli dalÅ¡Ãho. U tabulek si vysvÄ›tlÃme porovnávánà pozdÄ›ji. |
~= | Operátor pro porovnánà dvou hodnot. Výsledkem je true pokud se pravá strana nerovná levé. Lze použÃt na cokoli (kromÄ› desetinných ÄÃsel). |
not | Negace. PÅ™evracà pravdivostnà hodnotu (true na false a false na true). UžiteÄné u složitÄ›jÅ¡Ãch podmÃnek |
and | Logické a zároveň. Využità u vÄ›tÅ¡Ãch podmÃnek. True je pouze pokud jsou oba parametry true. |
or | Logické nebo. Využità u vÄ›tÅ¡Ãch podmÃnek. Vracà true jen když je jeden nebo vÃce parametru true. |
.. | SlouÄenà textu. Spojà 2 Å™etÄ›zce do jednoho výsledného. |
^ | Exponent. Zápis je a^b, kde a je základ a b je exponentem a. |
= | PÅ™iÅ™azenÃ. PÅ™iÅ™adà hodnotu na pravé stranÄ› do promÄ›nné na stranÄ› levé. |
*,/,-,+ | Matematické operátory. Význam snad nemusÃm vysvÄ›tlovat. |
Zde je pÅ™ehled operátorů lua. MyslÃm, že nemusÃm doplňovat a můžu pÅ™ejÃt rovnou na pÅ™Ãkaldy. SložitÄ›jÅ¡Ã ukázky ukážu pozdÄ›ji. To co zde ukážu a bude se mi zdát těžké vysvÄ›tlÃm podrobnÄ›ji.
PÅ™Ãklad:
1-- Priklad na operatory23-- promenne4local pravda = true;5local pravda2;6local cislo = 1.86446;7local cislo2 = 846.6556;8local cislo3 = 648;9local cislo4 = 2;10local text = "ahojda";11local text2 = "ahojky";1213-- ukazka operatoru <14if cislo < cislo2 then15 print("Cislo "..cislo.." je mensi nez cislo "..cislo2);16else17 print("Cislo "..cislo.." je vetsi nebo rovno nez cislo "..cislo2);18end;1920-- ukazka operatoru >21if cislo3 > cislo4 then22 print("Cislo "..cislo3.." je vetsi nez cislo "..cislo4);23else24 print("Cislo "..cislo3.." je mensi nebo rovno nez cislo "..cislo4);25end;2627-- operatory >= a <= jsou v podstate stejne, jen pridam tu moznost ze se rovnaji2829-- operator ==30if text == text2 then31 print("text se rovna text2");32else33 print("text se nerovna text2");34end;3536-- operator ~=37if pravda2 ~= nil then38 print("Hodnota promenne pravda2 je: "..pravda2);39else40 print("Nezname hodnotu promenne pravda2, protoze neni definovana.");41end;4243-- operator not44if not pravda then45 print("pravda je false");46else47 print("pravda je true");48 -- protoze je tam not ktere obrati vysledek49end;5051-- operatory and a or52if pravda and cislo < cislo2 then53 print("pravda je true a "..cislo.." je mensi nez "..cislo2);54end;5556if pravda2 ~= nil or cislo < cislo2 then57 print("pravda2 byla definovana nebo je "..cislo.." mensi nez "..cislo2)58end;
Operátory jsou velmi nároÄné na pochopenà a zároveň velmi jednoduché. DoporuÄuji chvÃli experimentovat a tvoÅ™it abyste plnÄ› pochopili o co se jedná. Na zkouÅ¡ku pÅ™ikládám soubory z tohoto návodu. VÅ¡Ãmejte si prosÃm, že nÄ›které operátory jsou pro jednu promÄ›nnou a nÄ›které pro dvÄ›. Porovnávacà operátory (==,~=,<,>,<=,>= a not) vracejà true/false a lze je zachytit i do promÄ›nné - moc se to ale nepoužÃvá a bude o tom Å™eÄ pozdÄ›ji.