6. diel - Cykly a ich syntax a použitie
Predchádzajúca lekcia, Podmienky a ich použitie , nás naučila pracovať s podmienkami a zákernosťami vetvenia programu.
Už sme si predstavili podmienky a povedali sme si, prečo sa bez nich nezaobídeme. Rovnako dôležité sú aj cykly. Nájdeme ich prakticky v každom dobre optimalizovanom kóde. Cykly slúžia nielen k lepšej prehľadnosti kódu, ale dokonca aj pracujú efektívnejšie, ako keby sme kód písali viackrát za sebou.
Cykly
Zrejme sme schopní odvodiť z názvu, že cyklus je niečo, čo sa opakuje v
nejakej slučke. Ukážeme rovno tri rôzne druhy cyklov a to for
,
while
a do-while
. Podrobne si vysvetlíme, ako ktorý
cyklus funguje.
for
Prvý a najzákladnejší cyklus, ktorý si ukážeme bude for
.
Tento cyklus je používaný najčastejšie, hlavne pre jeho prehľadnosť,
jednoduchosť a vopred určený počet priechodov. Počas cyklu for
sa menia postupne hodnoty, kým nenadobudne také, ktorú si prajeme. Cyklus
for
sa skladá z troch hlavných častí - premenná,
podmienka a príkaz. Syntax takéhoto cyklu vyzerá nasledovne:
void setup() { Serial.begin(9600); // for cyklus - vložíme ho do setupu z toho důvodu, aby se nám for cyklus neustále neopakoval (loop jede neustále dokola) for (int i = 0; i < 4; i++) { Serial.println("Výpis pomocí for cyklu"); // Příkaz pro vypisování textu pomocí for cyklu (text se vypíše 4x) } } void loop() { }
- Premenná (
int i = 0
) - v tomto prípade vlastne určuje počiatočnú hodnotu cyklu. Najčastejšie to býva nula, pretože od tej sa najčastejšie začína. Premenné vofor
cykloch sa väčšinou značia písmenom i (index), ale pomenovanie je vás. - Podmienka (
i < 4
) - nám udáva v akom prípade sa vykoná ďalší krok nášhofor
cyklu. Keď nastane situácia, že nami vytvorená podmienka platiť nebude, cyklus skončí a program pokračuje ďalej. V našom prípadefor
cyklus prestane fungovať, keď premennái
bude väčšia, než číslo 4. - Príkaz (
i++
) - tu hovorí, čo sa má s hlavnou premennou v cykle stať - konkrétne či sa má zvýšiť, alebo znížiť. K tomu využijeme operátorov++
(inkrementácia) a--
(dekrementácia). Tieto operátory samozrejme môžeme využívať aj mimo definície cyklufor
, ich funkčnosť zostane rovnaká. V našom prípade zvýšime vždy po každom cykle premennúi
o číslo 1.
for
cyklus je prehľadná a tiež
jednoduchá. Určite je to lepšia voľba, než kód nezmyselne viackrát
opisovať.
while
Ďalší cyklus, ktorý si vysvetlíme je while
, ten funguje na
trochu inom princípe, než cyklus for
. Išlo by si význam tiež
odvodiť z slovenského prekladu, kedy while
znamená „zatiaľ
čo“. Tento cyklus nám teda hovorí, že príkaz uvedený v bloku sa opakuje
pokiaľ platí podmienka.
Syntax while
je vlastne ešte jednoduchšie, než u
for
. V zátvorke vedľa while
je podmienka a pod ňou
už je len zátvorkami označený blok, v ktorom sú všetky príkazy. Cez
cyklus while
je možné urobiť aj cyklus for
,
pretože for
je vlastne taký prípad while
.
While
cyklus sa ale často používa na trochu iné veci, ktorých
príklad si tiež ukážeme. V praxi môže využitie tohto cyklu vyzerať
nasledovne:
bool stav_cyklus = true; // Proměnná, která může mít 2 stavy - true/false --> určuje nám funkci while cyklu void setup() { Serial.begin(9600); // While cyklus, je zde podmínka, která když bude platit, tak cyklus bude probíhat (v našem případě neskončí) while (stav_cyklus == true) { Serial.println("While cyklus probíhá"); // Výpis textu do sériového monitoru } } /* * Programová smyčka */ void loop() { }
Môžete vidieť, že náš cyklus vkladáme do funkcie
void setup()
, je to z toho dôvodu, aby sme si ukázali funkčnosť
samotného while
cyklu. Keby sme cyklus vložili do funkcie
void loop()
, tak neuvidíme žiadny rozdiel. Je to z toho dôvodu,
pretože void loop()
je tiež taký cyklus a neustále sa
opakuje.
Potom až budeme robiť zložitejšie programy, tak budeme pracovať
primárne s void loop()
funkciou, kde sa bude odohrávať
väčšina nášho kódu. Tento cyklus sa potom dá hojne využívať pri práci
s tlačidlami alebo LED, ale o tom sa dozviete viac v kurze Arduino - Hardware. Tento článok
slúži primárne na to, aby sme si ukázali aké možnosti budeme potom
využívať.
do-while
Posledným cyklom, ktorý si dnes spomenieme je cyklus do-while
.
Tento cyklus je veľmi podobný predošlému while
cyklu. Zásadný
rozdiel medzi nimi je ale ten, že v cykle do-while
je podmienka
umiestnená až na konci cyklu. Tým máme zaistené, že sa ľubovoľný cyklus
vykoná aspoň raz.
Syntax do-while
je tiež pomerne jednoduchý, prvá časť cyklu
je do
, Ktorý sa, ako už sme si povedali vykoná minimálne
jedenkrát. Po príkaze alebo bloku príkazov v cykle nasleduje na konci
kľúčové slovo while
s podmienkou, ktorá je po vykonaní akcie
skontrolovaná. Keď sa podmienka vyhodnotí ako neplatná, je cyklus
preskočený. Pokiaľ je podmienka platná, cyklus sa opakuje rovnako ako pri
while
.
Rovnako ako pri predchádzajúcich cykloch, aj tento si teraz ukážeme v
praxi. Tu môžeme vidieť využitie do-while
cyklu:
bool stav_cyklus = true; // Proměnná, která může mít 2 stavy - true/false --> určuje nám funkci while cyklu // Funkce setup() - proběhne jednou, poté se už neopakuje void setup() { Serial.begin(9600); // Baudova rychlost - nastavíme na 9600 --> slouží pro komunikaci na sériovém monitoru do { Serial.println("Do-while cyklus probíhá"); // Výpis textu do sériového monitoru } // Do-while cyklus - proběhne jednou a pak se zkontroluje, zda platí podmínka, pokud ne --> cyklus je přeskočen while (stav_cyklus == true); } // Funkce loop() - neustále se opakuje void loop() { }
Hoci cyklus do-while
nie je tak používaný ako
while
, alebo for
, v nejakých situáciách môže byť
vhodnejšie.
Na záver je určite dobré spomenúť, že s cyklami sa toho dá vymyslieť oveľa viac, ale na začiatok je toto dostačujúce. Nechceme vás hneď na začiatku preťažiť a zmiasť s nadmierou syntaxe!
Prebrali sme si teda tri cykly av akých prípadoch ich používať. Dúfame, že vám táto kapitola bola nápomocná a niečo ste si z nej odniesli.
V budúcej lekcii, Čítanie užívateľských vstupov v Arduine , si predstavíme základné funkcie na čítanie vstupných dát od užívateľa, povieme si, ktorú použiť na čítanie rôznych dátových typov a vysvetlíme si, čo je to parsovanie.