Úloha 4 – Switch v praxi: přehledné větvení objednávky
| Stránky: | Moodle ZČU |
| Kurz: | Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný) |
| Kniha: | Úloha 4 – Switch v praxi: přehledné větvení objednávky |
| Vytiskl(a): | Nepřihlášený host |
| Datum: | neděle, 18. října 2026, 05.55 |
Úvod do úlohy
V této závěrečné části se naučíte refaktorovat existující větvení tak, aby bylo čitelné, udržovatelné a bez skrytých chyb. Někdy je dlouhý řetězec else if přehlednější převést na switch, jindy je naopak lepší složitý switch nahradit několika logickými výrazy v if–else. Cílem je umět si položit správné otázky: „Rozhoduji podle jedné hodnoty (hodí se switch) nebo kombinuji více podmínek (hodí se if–else)?“, „Je zápis konzistentní a doplněný komentáři?“, „Nemám zbytečné propadávání mezi větvemi?“.
Teorie a principy
-
Kdy zvolit
switch: Rozhodujete podle jednoho výrazu (např. kód stavu, typ akce, název dne) a každá větev je nezávislá.switchporovnává hodnoty striktně (jako===), a je tím pádem přesný. -
Kdy zvolit
if–else: Potřebujete kombinovat více logických testů (např. rozsahy čísel, vícenásobné podmínky s&&a||).if–elseje pružnější a čitelnější. -
Konzistence a komentáře: Každou větev krátce popište – co přesně řeší. Usnadní to čtení i budoucí změny.
-
Bezpečné ukončování větví: U
switchpoužívejtebreakna konci každéhocase, pokud záměrně nechcete propadávat. -
Jedno místo pravdy: Společné kroky provádějte ideálně jednou mimo větvení (např. přiřazení textu do DOM až po výběru výsledku).
-
Datové typy: U
switchsi hlídejte typy (příchod z formuláře bývá řetězec). -
Styl v tomto kurzu: Bez
var, pouzeletaconst. V podmínkách explicitně porovnáváme:if (podminka == true), pro negaciif (podminka == false)(ekvivalent!podminkalze uvést v komentáři). Nepoužíváme ternární operátor.
Praktické příklady kódu
1) Dlouhé else if → přehledný switch
Původní kód: volba zprávy podle kódu. Mnoho else if začíná být nepřehledných.
Refaktor na switch – rozhodujeme podle jedné hodnoty kod, větve jsou nezávislé:
2) Zbytečně složitý switch → jasné if–else s logikou
Původní switch se snaží řešit rozsahy bodů. To je nepraktické, protože switch testuje na konkrétní hodnoty.
Refaktor na if–else: pro rozsahy je to přirozenější a čitelné.
3) Jednotné místo pro výstup (HTML/JS) + komentáře větví
4) Kontrolní seznam pro refaktoring větvení (mini checklist)
-
Rozhoduji podle jedné hodnoty? → zvažte
switch. -
Kombinuji více výrazů (rozsahy,
&&,||)? → zvažteif–else. -
Je kód bez duplicit? Společné kroky proveďte jednou mimo větvení.
-
Jsou všude komentáře k větvím? Stručně vysvětlete záměr každé větve.
-
U
switchje všudebreak? Vyhněte se nechtěnému propadávání. -
Je zachována typová shoda?
switchporovnává jako===. -
Je pořadí testů správné? Od nejpřesnějších k obecným.
Typické chyby / záludnosti
-
switch(true)hack: Svádí k psaní rozsahů vswitch, ale zhoršuje čitelnost. Pro rozsahy použijteif–else. -
Chybějící
break: Neplánované propadávání mezi větvemi. -
Míchání typů: Vstupy z formuláře jsou řetězce;
switchpak nemusí najít shodu s číslem. -
Duplicitní kód ve větvích: Sloučit do jednoho společného kroku mimo větvení.
-
Nekonzistentní styl: V kurzu nepoužíváme
var, ternární operátor ani zkrácené formy negace; vifexplicitně porovnáváme (== true,== false).
Shrnutí
-
Refaktoring vybírejte podle povahy rozhodování: jedna hodnota →
switch, více logických podmínek →if–else. -
Udržujte konzistentní styl, přidávejte stručné komentáře k větvím.
-
Ve
switchvždy kontrolujtebreaka uvažtedefaultjako záchytnou větev. -
Společné kroky provádějte jednou mimo větvení (lepší čitelnost, méně chyb).
-
Hlídáte si typovou shodu (u
switchjako===) a vyvarujte se duplicit i nechtěných průběhů.
Úloha
Zadání (kontext úlohy):
Tvůj e-shop zobrazuje zákazníkovi informaci podle aktuálního stavu objednávky. Stav je vždy uložený v proměnné stav jako řetězec ("nova", "zabalena", "odeslana", "dorucena", "zrusena"). Tvým úkolem je kód refaktorovat:
-
Nejprve je ukázána nepřehledná verze s
if / else if. -
Tvým úkolem je přepsat ji na přehledný
switch, doplnitbreakadefault, a přesunout společný krok mimo větvení.
Cíl úlohy
Procvičit rozhodování mezi switch a if–else, správné použití break a default, a princip „jedno místo pravdy“.
Vstupní podmínky:
-
Student pracuje pouze s nově vytvořeným souborem
script.js. -
Používej pouze
letneboconst. -
V podmínkách explicitně porovnávej (
===,== true,== false).
Požadovaný výstup:
-
Pokud
stav === "nova"→zprava = "Objednávka přijata" -
Pokud
stav === "zabalena"→zprava = "Objednávka je zabalena" -
Pokud
stav === "odeslana"→zprava = "Objednávka je na cestě" -
Pokud
stav === "dorucena"→zprava = "Objednávka byla doručena" -
Pokud
stav === "zrusena"→zprava = "Objednávka byla zrušena" -
Jinak →
zprava = "Neznámý stav"
Společný krok: výsledek zobrazit jen jednou pomocí alert(zprava).
Doplňující pokyny:
-
Uvědom si, proč je zde
switchvhodnější než dlouhý řetězecelse if: rozhodujeme jen podle jedné hodnoty (stav). -
Vyzkoušej změnit hodnotu
stavna různé varianty. -
Dbej na správné umístění
break, aby nedocházelo k propadávání.
Řešení úlohy
Co je zde splněno
-
Použita proměnná
stavjako řetězec. -
Rozhodování provedeno pomocí
switchmísto dlouhého řetězceif – else if. -
Každý
caseje zakončenbreak, takže nedochází k propadávání. -
Přidán
defaultpro neznámé stavy. -
Společný krok (
alert(zprava)) je mimo větvení → přehlednější kód.
Poznámky
switchje zde vhodnější nežif – else, protože se vždy rozhoduje jen podle jediné proměnné.Pokud se později přidá nový stav, stačí doplnit další
case.