Když/jinak

Navigace:  Rozhodování >

Když/jinak

Předchozí stránkaNahoruDalší stránka

Základním prostředkem pro větvení kódu v Urwigu je akce Když/jinak. Umožňuje nám vytvořit v jednom okamžiku několik paralelních větví kódu a určit, za jakých podmínek se ta která větev vykoná.

 

Podmínka

Po přetažení akce do diagramu vznikne jakýsi zárodek s jednou jedinou větví nadepsanou „Jinak“. Tato větev není ničím zajímavá a kód, který je v ní obsažen, se vykoná vždy (tedy jako kdyby tam žádná akce Když/jinak nebyla). Abychom z ní opravdu udělali správnou rozhodovací větev, musíme na její začátek přidat podmínku.

 

K zadání podmínky slouží většina možností z levého panelu nazvaného Výrazy. Přesunutím požadovaného výrazu do záhlaví vznikne podmíněná větev, jejíž kód se vykoná pouze v případě, že je podmínka splněna. Podmíněná větev je uvozena textem „Když“.

 

Přidání dalších větví

Pomocí klepnutí na malé tlačítko „+“ v záhlaví akce (pokud na něm necháme myš chvíli spočinout, objeví se v bublině nápis „Přidat větev“) můžeme přidávat další větve. Platí pravidlo, že počet větví „Když“ není omezen, zatímco větev „Jinak“ může být maximálně jedna a musí se nacházet úplně vpravo.

 

Můžeme tedy udělat akci Když/jinak, která

 

obsahuje pouze jednu větev „Jinak“ - kód ve větvi se vykoná vždy, stejně jako kdyby byl uveden samostatně mimo akci,

obsahuje pouze jednu větev „Když“ - kód ve větvi se vykoná pouze v případě, že je podmínka splněna, v opačném případě je celá akce Když/jinak vynechána a běh pokračuje kódem následujícím po akci,

obsahuje jednu větev „Když“ a jednu větev „Jinak“ - kód ve větvi „Když“ se vykoná v případě, že je podmínka splněna, pokud splněna není, vykoná se kód ve větvi „Jinak“,

obsahuje několik větví „Když“ - vykoná se pouze kód v té větvi, jejíž podmínka je splněna, pokud není splněna podmínka žádné větve, je celá akce Když/jinak vynechána a běh pokračuje kódem následujícím po akci,

obsahuje několik větví „Když“ a jednu větev „Jinak“ - vykoná se pouze kód v té větvi, jejíž podmínka je splněna, pokud není splněna žádná podmínka, vykoná se kód ve větvi „Jinak“.

 

Na druhou stranu NEMŮŽEME udělat akci Když/jinak, která

 

obsahuje více jak jednu větev „Jinak“,

obsahuje větev „Když“, která nemá uvedenu podmínku,

obsahuje jednu větev „Jinak“, která ale není umístěna úplně vpravo.

 

Co když jsou v jednom okamžiku splněny podmínky z více větví současně?

Každá větev „Když“ může mít uvedenu libovolnou podmínku. Podmínky v jednotlivých větvích spolu nemusí být v žádném souladu. Může se tedy klidně stát, že při vyhodnocování jsou splněny podmínky více větví současně. Vadí to nějak? Nevadí. Větve jsou vyhodnocovány postupně zleva doprava. Jakmile se narazí na první větev splňující podmínku, je vykonán její kód a ostatní větve jsou ignorovány. Na to je potřeba myslet při sestavování pořadí větví.

 

Mějme např. tři větve: A s podmínkou „proměnná = 3“, B s podmínkou „proměnná > 4“ a C s podmínkou „proměnná > 1“.

Pokud je poskládáme v pořadí ABC, pak může dojít k těmto variantám: V případě, že bude platit „proměnná = 5“, pak se vykoná kód větve B. Pro „proměnná = 3“ se vykoná kód větve A a pro „proměnná = 2“ se vykoná kód větve C.

Jak to však bude, pokud je poskládáme v pořadí ACB? Pro „proměnná = 3“ se vykoná větev A a pro „proměnná = 2“ se vykoná C jako v předchozím případě. Ale pro „proměnná = 5“ se vykoná také větev C a nikoliv B. Proč? Protože větev C se vyhodnotí dříve a 5 > 1, takže podmínka je splněna. Na větev B už nedojde.

Ještě hůře dopadneme, pokud větve poskládáme v pořadí CBA. Ve všech uvedených případech se vykoná větev C a na větve B a A se nedostane.

 

Jak vidíme, při sestavování podmínek do akce Když/jinak si musíme dát dobrý pozor na to, co děláme. Jinak by se nám mohlo stát, že některými větvemi nebude mít hra vůbec šanci projít.

 

Odebrání větve

Již přidanou větev můžeme kdykoliv odebrat tak, že na ni klepneme levým tlačítkem myši a stiskneme klávesu Delete. Také můžeme klepnout pravým tlačítkem myši a ze zobrazeného kontextového menu zvolit příkaz Odstranit. Větev je odebrána včetně případného kódu.

 

Změna pořadí větví

O kousek výše jsme si ukázali, že pořadí větví může hrát důležitou roli. Co dělat, pokud už máme větve zadefinované, ale chceme dodatečně změnit jejich pořadí? Jednoduše použijeme myš a pomocí operace drag&drop uchopíme libovolnou větev a přesuneme ji na nové místo.

 

Sbalení větve

I jednotlivé větve můžeme podobně jako celé akce sbalit klepnutím na malý trojúhelníček vlevo od jejich nadpisu. To je obzvlášť výhodné ve chvíli, kdy je větví hodně nebo mají komplikovaný obsah a orientace v diagramu začíná být nepřehledná.

 

Zakázání větve

A stejně jako akci, také větev můžeme zakázat a pak zase případně povolit. Opět to provedeme pomocí pravého tlačítka myši, když z kontextového menu vybereme příkaz Zakázat. Celá větev nám zezelená a při vyhodnocování nebude vůbec brána v potaz.