5. diel - Podmienky a ich použitie
Minulá lekcia, Premenné, komentáre a čítanie vstupu , nás naučila pracovať s premennými a komentármi. Predviedli som aj ukážku užívateľského vstupu.
Už vieme, čo sú to premenné a na čo sa vlastne používajú, teda môžeme pokročiť trochu ďalej. Táto lekcia nás zľahka prevedie podmienkami. Budeme sa rozprávať o ich funkcii aj dôležitosti. Žiadny dobrý programátor sa bez podmienok nezaobíde. Ide teda o jednu z najzákladnejších a zároveň najdôležitejších látok, ktoré sa musíme v programovaní podrobne venovať. Ak sa naučíme, ako podmienky ovládať a efektívne s nimi pracovať, tak sa nám otvorí množstvo možností. Táto lekcia nám síce poskytne dostatočný prísun informácií, ale predsa len pre záujemcov tu máme podrobnejší kurz Základná konštrukcia jazyka C.
Podmienky
Dalo by sa povedať, že podmienky sú vlastne možnosť reakcie na vzniknuté situácie. Zjednodušene – keď sa niečo stane, budeme na to musieť nejako reagovať. Napríklad: Zazvoní zvonček pri dverách. Naša reakcia môže byť, že ideme otvoriť alebo ho ignorujeme.
Takéto rozhodnutia majú veľa spoločného s vetvením programu. Normálne program začne prvým príkazom a potom vykonáva jeden za druhým. Podmienky však umožnia preskočiť na iné miesto programu, alebo vykonať iný kód, v závislosti od aktuálnej situácie. Veľmi často túto situáciu povedzme stav programu, ovplyvňuje používateľ. Avšak môže na to mať vplyv aj vrátená hodnota z nejakého funkcie alebo pripojeného zariadenia. Napríklad senzor pohybu zaznamená aktivitu a poskytne testovateľný vstup základnej doske. Podľa stavu sa môžeme rozhodnúť, či spustiť poplach a volať políciu, alebo sa rozhodnúť, že je všade pokoj a pohoda.
Je veľa situácií, v ktorých sa hodí podmienku použiť. Dokonca by sme povedali, že sa bez tejto fundamentálnej znalosti nezaobíde ani ten najhorší možný programátor. To je dôvod, prečo si dnes vysvetlíme, ako s podmienkami pracovať a hlavne ich funkčnosť. Pre lepšiu predstavu si všetko ukážeme na jednotlivých príkladoch.
Zápis podmienok
Možno povedať, že všetky podmienky majú tvar: Pokiaľ niečo, tak vykonáme toto. Inak urobíme tamto. Teraz si to však musíme rozobrať detailnejšie.
Kľúčové slovo if
Ak chceme zapísať podmienku, tak nám na to poslúži kľúčové slovo
if
(písané malými písmenami). Tento výraz znamená v preklade
"Keď, ak...", čo nám napovedá, ako tento typ podmienky funguje. Slovo
if
nám hovorí, že pokiaľ je podmienka splnená, prebehne kus
kódu, ktorý sa nachádza v bloku programu pod konkrétnou podmienkou.
Blok programu v C, C++ a teda aj Wiring je všetko, čo
obsahujú zložené zátvorky { ... }
.
Skúsme si to pre lepšiu predstavu ukázať na príklade:
/* * Proběhne pouze jednou. * Nastavíme komunikační rychlost na 9600 Baud*s^(-1) */ void setup() { Serial.begin(9600); } /* * Hlavní smyčka programu */ void loop() { if (1 < 2) // Ptáme jestli je 1 menší než 2? Vždy je to pravda a tak proběhne blok níže { Serial.println("Podmínka platí"); // Výpis do sériového monitoru } }
Pokiaľ by sme podmienku obrátili:
if (1 > 2) {...}
, celý blok programu v zložených zátvorkách
sa preskočí a pokračuje až za ním.
Teda vieme, že if
môžeme použiť v prípade, keď treba o
niečom rozhodnúť - niečo sa stalo a reagujeme. Môžeme ho tiež použiť,
keď sa niečo nestane.
Dobrým príkladom môže byť, keď program vyzve používateľa, aby zadal
kladné číslo, ktoré je potom porovnávané s číslom iným. Keď podmienku
užívateľ nesplní a zadá napríklad číslo záporné, môžeme podmienku
if
použiť na to, aby užívateľovi „vynadala“ za jeho chybu
a nám sa tak nezrútil celý program.
Kľúčové slovo else
Keď sa zamyslíme nad spracovaním podmienky s príkazom if
,
zistíme, že niečo chýba. Taká odpoveď na otázku: Čo keď to prvé je
zle?
Jazyk Arduina ponúka riešenie aj tejto otázky a tým je kľúčové slovo
else
(môžeme ho preložiť ako „inak“). Prevedené do
programátorskej reči:
if (cosi) { // cosi je pravda, tak uděláme kód tady } else { // cosi je blbě, tak provedeme tento kód }
Pre lepšiu predstavu fungovania si ukážeme praktický príklad a trošku upravíme program, ktorý sme si ukazovali hore:
void setup() { Serial.begin(9600); } void loop() { if (1 > 2) // Jednoduchá podmínka, kde se ptáme jestli je 1 větší než 2 { Serial.println("Podmínka platí"); // Podmínka platí -> vypíše se text } else // Prvotní podmínka je neplatná { Serial.println("Podmínka neplatí"); // Vypíše se tohle } }
Viac volieb else if
Aby sme mohli vytvoriť viac možností jednotlivých podmienok nám
poslúži výraz else if
. Takto môžeme nastaviť neobmedzene
možností a tým sa pripraviť na rôzne scenáre, ktoré by mohli v priebehu
programu nastať. Trochu upravíme náš predošlý program a ukážeme si, ako
by sme tam mohli implementovať else if
.
int a = 1; // Proměnná, kterou poté budeme porovnávat. (Celé číslo) void setup() { Serial.begin(9600); } void loop() { if (a > 3) // Ptáme jestli je proměnná 'a' větší než 3 { Serial.println("Proměnná a je větší, než 3"); // Vypíšeme text } else if (a == 1) // Ptáme jestli je proměnná 'a' rovna 1 { Serial.println("Proměnná a je rovna 1"); // Ano je rovna jedné } else if (a == 2) // Ptáme jestli je proměnná 'a' rovna 2 { Serial.println("Proměnná a je rovna 2"); } else { Serial.println("Proměnná a je asi 0 nebo záporná"); // Víc možností nemáme } }
Operátory využívané pri podmienkach
Tu by som mohol rozobrať mnoho matematických teórií, ale nám postačí, že jednoduchá znalosť. Na každej množine čísel je definovaná relácia. Teda porovnanie. Programátori tohto faktu často využívajú av podmienkach najčastejšie😇
Každý (bžžný) programovací jazyk má k dispozícii takzvané relačné
operátory, ktoré sú neoddeliteľnou súčasťou if
výrazu.
Jeden relačný operátor (porovnanie: ==
) sme využili náš
kód vyššie. Predkladám tu tabuľku s ďalšími príkladmi relačných
operátorov, ktoré sa pri podmienkach tiež hojne používajú:
Operátor | Kompletný zápis | Význam |
---|---|---|
== | x == y | Ak sa x rovná y |
!= | x != y | Ak sa x nerovná y |
< | x < y | Ak je x menší ako y |
> | x > y | Ak je x väčšia ako y |
<= | x <= y | Ak je x menší alebo rovný y |
>= | x >= y | Ak je x väčší alebo rovný |
Podmienky a logické operátory
Vieme ako na to, keď je podmienka jedna, ale čo robiť v prípade, keď chceme, aby platilo viac podmienok naraz?
Aj pre túto situáciu tu existuje riešenie. Poslúži nám na to operátor
&&
, ktorý v slovenčine znamená "súčasne" a
||
, Jeho význam je "alebo". Skratka pre &&
je
Ctrl + Alt + C a pre ||
to je
Ctrl + Alt + W.
Operátor | Kompletný zápis | Význam |
---|---|---|
&& | x and y alebo x && y | Ak je xa súčasne y |
|| | x or y alebo x || y | Ak je x alebo y |
int a = 1; // Definice proměnné a s hodnotou 1 int b = 0; // Definice proměnné b s hodnotou 0 void setup() { Serial.begin(9600); } void loop() { if (a == 1 && b == 0) // Pro splnění musí být 'a' rovno 1 a současně 'b' rovno 0 (v našem případě podmínka proběhne) { Serial.println("Proměnná a je rovna 1, zatímco proměnná b je rovna 0"); } }
Možno by som mal upozorniť na "lenivé" vyhodnotenie podmienok. Vyššie
uvedený príklad bude spracovaný celý, ale skúsme podmienku
if (a == 1 || b == 0) {...}
. Tu sa prvýkrát porovná
a
jednotkou a pokiaľ je výsledok kladný, programu to stačí.
Teda b == 0
je už nedôležitý a bude preskočený.
Kľúčové slovo - switch
Ak máme podmienok viac, chceme začať nejakou voľbou a pri tom si udržať
kód prehľadný, môžeme použiť sekvenciu switch
. Ide o istú
alternatívu k else if
, ktorá je viac prehľadná. Funkcionalitou
je switch
dosť podobný else if
. Ukážeme si
jednoduché využitie a celkový zápis switch
:
int volba = 1; // Proměnná s hodnotou 1 void setup() { Serial.begin(9600); } void loop() { switch (volba) // Switch s dosazenou proměnnou "volba" --> hodnota proměnné je 1, což znamená, že proběhne case 1 { case 1: // Volba číslo 1 - proběhne, když proměnná volba bude rovna 1 Serial.println("Zvolena možnost 1"); // Výpis textu do sériového monitoru break; // Zamezíme vyhodnocení dalších voleb case 2: Serial.println("Zvolena možnost 2"); break; case 3: // Volba číslo 3 Serial.println("Zvolena možnost 3"); break; default: // Výchozí volba - proběhne, nebude-li proměnná rovna žádné z možností Serial.println("Žádná ze zvolených možností"); // Výpis textu do sériového monitoru } }
Každý blok switch ide nahradiť blokom else if
,
záleží na vašej preferencii a na situačnej prehľadnosti programu.
Z podmienok, volieb a vetvenia programu je to zatiaľ všetko. Prax vás určite odprevadí aj k ďalším zákutiam programátorského umenia.
V nasledujúcej lekcii, Cykly a ich syntax a použitie , sa zoznámime s cyklami v jazyku Wiring a predvedieme si ich praktické použitie.