Lekce 7 - Podmínky (větvení) ve Scratchi
V minulé lekci, Jednoduchá kalkulačka ve Scratchi, jsme si vytvořili jednoduchou kalkulačku a ukázali si chyby, kterých se při práci s proměnnými vyvarovat.
Ve většině programů potřebujeme nějak reagovat na různé situace. Může to být například hodnota zadaná uživatelem, podle které budeme chtít měnit další chování programu. Říkáme, že se program větví a k větvení používáme podmínky. Těm se budeme věnovat celý dnešní Scratch tutoriál. Nakonec vytvoříme program, který nám řekne, jestli jsme dospělí, nebo ne.
Podmínka v bloku když ... tak
Podmínku najdeme v blocích Ovládání. Konkrétně jde o blok když ... tak. Do prázdného prostoru mezi když a tak vkládáme nějaký logický výraz. To je jakékoli tvrzení, o kterém zjišťujeme, zda je pravdivé, nebo není.
Pojďme si vyzkoušet jednoduchou ukázku. Nejprve si jako vždy přidáme do programu blok po kliknutí na (vlaječka), potom půjdeme do bloků Ovládání a přilepíme blok když ... tak:

Dále se přepneme na bloky Operátory a mezi slova když a
tak přidáme blok větší než. Na pravé straně necháme
hodnotu 50
a doleva napíšeme číslo 60
:

Potom dovnitř bloku když ... tak vložíme blok
bublina ... sekund z bloků Události a text přepíšeme na
Podmínka je splněna.
Za blok když ... tak vložíme
další bublina ... sekund, do které napíšeme
A program pokračuje.
Celý program bude vypadat takto:

Program si můžeme krásně přečíst. Podmínka říká: Když je 60 větší než 50, tak se zobrazí bublina, že podmínka je splněna.
Když program pustíme, opravdu se tak stane:

Všechen kód, který je mimo blok když
... tak se provede vždy. Zkusme si místo 60
napsat na levou stranu třeba číslo 40
a program znovu spusťme.
Podmínka není splněna, protože 40
není
větší než 50
. Všechno, co je uvnitř podmínky se
tedy přeskočí, ale věta A program pokračuje.
se vypíše
😉
Načtení uživatelského vstupu
V podmínce můžeme samozřejmě načítat i hodnotu od uživatele. Přidáme si před blok když ... tak z bloků Vnímání blok otázka. V otázce vyzveme uživatele, aby sám zadal nějaké číslo. Místo čísla na levé straně bloku je větší potom dáme blok odpověď:

Teď budeme moci reagovat a měnit chování programu podle toho, jaké číslo zadá uživatel 🙂 Pojďme si to vyzkoušet:

Relační operátory
Ukažme si nyní relační operátory, které můžeme ve výrazech používat.
Větší než
Tento operátor jsme si již vyzkoušeli. Podmínka je splněna, pokud je číslo na levé straně větší než číslo na pravé straně:

Menší než
Tento operátor je pravdivý, pokud je číslo na levé straně menší než číslo na pravé straně:

Je rovno
Další operátor porovnává, zda jsou hodnoty na obou stranách rovnítka stejné. Poté je podmínka splněna:

Porovnávat pomocí operátoru je rovno můžeme i
textový řetězec. Obě hodnoty ale musejí být úplně
přesně stejné. Pokud například napíšeme na jednu stranu slovo
Ahoj
a na druhé straně budeme mít stejný text s mezerou na
konci, podmínka se nesplní 😉
Obsahuje
Posledním operátorem, který si dnes ukážeme, je operátor
obsahuje. Pomocí něho zjišťujeme, zda dané slovo obsahuje
písmeno, nebo část textu z pravé strany. Operátor bude pravdivý, pokud
například zapíšeme kočka
obsahuje k
nebo
vyhraný
obsahuje hra
:

Podmínka v bloku když ... tak ... jinak
Pojďme se teď zamyslet, jak to zařídit, aby program naopak něco udělal, pouze pokud se podmínka nesplní. Kdybychom nad tím přemýšleli, možná by některé z nás napadlo řešení, které vypadá takto:

Takový kód by opravdu fungoval a pokud vás takové řešení napadlo, určitě si zasloužíte pochvalu 😉
Řešit všechny podmínky tímto způsobem by však někdy bylo velice
složité. Mohlo by se totiž stát, že podmínku nadefinujeme špatně a
neošetříme například, co se má stát, když zadáme číslo
50
. Takový program je zkrátka velmi citlivý na chybu
programátora, a navíc působí nepřehledně. Jde to tedy udělat i lépe? Ano
🙂 Scratch nám pro takové případy nabízí blok když ... tak ...
jinak.
Program zjišťující, zda jsme dospělí
Pojďme si zkusit udělat program, kde se nás kočičák zeptá, kolik nám je let. Pokud nám bude 18 a více, tak nám poví, že jsme dospělí. Pokud nám bude méně, odpoví, že dospělí nejsme.
Začátek programu bude stejný jako u předchozího příkladu na podmínky,
kde uživatel zadával číslo k porovnání. Začneme blokem po kliknutí
na (vlaječka) a za ten nalepíme otázku
Kolik ti je let?
:

Teď přijde drobná změna a místo bloku když ... tak přilepíme za náš program z bloků Ovládání blok když ... tak ... jinak:

Mezi slova když a tak vložíme z Operátorů blok větší než a na levou stranu vložíme z bloků Vnímání blok odpověď:

Teď musíme programu povědět, že chceme, aby nás prohlásil za
dospělé, pokud nám je 18 a více. Doufám, že se nikdo
zbrkle nepustil do programování a nenapsal místo čísla 50
číslo 18
🙂 Pokud ovšem někdo v programování předbíhal a
napsal místo 50
číslo 17
, zaslouží si velkou
pochvalu 😉
Vraťme se však k číslu 18
. Co by to vlastně znamenalo?
Jestliže nám už bylo 18, jsme dospělí. Ale program s podmínkou
odpověď větší než 18
bere jako dospělé
osoby lidi, kterým je více než 18. Člověka, kterému je
18, by tak náš program bral ještě za nedospělého a dospělý by byl
člověk až od 19 let 😉 Pokud tedy chceme, aby náš program pracoval
správně, musíme místo čísla 50
napsat číslo
17
. Když teď zadáme jako náš věk číslo 18
,
podmínka bude tím pádem splněna a program nás správně prohlásí za
dospělého.
To je jen další ukázka toho, že se pomalu dostáváme k čím dál zajímavějším programátorským kouzlům, která ale vyžadují více přemýšlení 😉
Pojďme tedy místo 50
doplnit číslo 17
:

Nakonec přidáme bubliny, které nám na základě našeho věku řeknou, zda jsme dospělí:

Když teď program pustíme, kočičák opravdu pozná na základě věku, jestli jsme dospělí, nebo ne:

V příští lekci, Podmínky (větvení) podruhé: Vysílání zpráv ve Scratchi, se naučíme skládat podmínky pomocí logických operátorů a naučíme se ve Scratch aplikacích využít vysílání zpráv.