Úloha 4 – Rozklad složité podmínky do mezikroků
| Stránky: | Moodle ZČU |
| Kurz: | Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný) |
| Kniha: | Úloha 4 – Rozklad složité podmínky do mezikroků |
| Vytiskl(a): | Nepřihlášený host |
| Datum: | neděle, 18. října 2026, 17.29 |
Úvod do úlohy
Refaktoring podmínek je jeden z nejrychlejších způsobů, jak zlepšit čitelnost a spolehlivost kódu. V praxi se často hromadí dlouhé řetězce if větví, opakované testy a drobné nesrovnalosti, které znesnadňují údržbu a vedou k chybám. Cílem tohoto bloku je naučit se rozpoznat problematické podmínky, rozsekat je na menší srozumitelné části, odstranit duplicity a sjednotit styl tak, aby se kód dal snadno číst a rozšiřovat. U velmi jednoduchých rozhodnutí si také ukážeme, kdy by šlo uvažovat o zkráceném zápisu (ternární operátor) – v našich ukázkách pro začátečníky jej nepoužijeme a vždy ukážeme ekvivalentní, přehledný if–else.
Teorie a principy
-
Rozdělení složité logiky: Dlouhý logický výraz rozdělte do pojmenovaných mezikroků (pomocných proměnných), které jasně sdělí „co testujete“.
-
Eliminace duplicit: Opakující se části (stejné výpočty, stejné porovnání) vytáhněte nad podmínky do jedné proměnné a znovu použijte.
-
Pořadí testů: Testujte od nejčastějších a nejlevnějších kontrol k nejvzácnějším a nejnákladnějším.
-
Záchytná větev:
else(nebo posledníelse if) použijte jako jasnou výchozí (fallback) variantu. -
Jedno místo pravdy: Pokud více větví dělá tentýž krok, zkuste ho provést až po rozhodnutí (nebo naopak před ním), aby nebyl ve více kopiích.
-
Jednoduché rozhodnutí ≠ dlouhý blok: Když větev jen „vybere text“ či „přepne CSS třídu“, stačí krátký
if–else. (Ternární operátor by se sem hodil, ale v tomto kurzu pro začátečníky zůstáváme u standardníhoif–else.)
Poznámka k syntaxi v našem kurzu:
V podmínkách vždy porovnáváme explicitně, např.
if (isValid == true)a pro negaciif (isValid == false).Pro rovnost typu i hodnoty preferujeme
===a pro nerovnost!==.Nepoužíváme šipkové funkce ani ternární operátor; v komentáři občas uvedeme jejich ekvivalent pro představu.
Praktické příklady kódu
1) Refaktoring dlouhého výrazu do pojmenovaných kroků (JS)
Původní kód je těžko čitelný – mnoho podmínek v jedné řádce a duplicity:
Refaktorujeme do menších kroků s názvy, které čtenáři napoví záměr:
Komentář: Logika je stejná, ale nyní je jasně čitelná. Když se požadavky změní (např. věková hranice), upravíme jediný výraz.
2) Odstranění duplicitních větví (JS)
Původní kód opakuje stejný „post-processing“ ve více větvích:
Refaktor: rozhodneme jen text a zobrazení provedeme jednou:
3) Přehlednější řazení podmínek a „záchytná“ větev (JS + HTML/CSS)
Původně: nepraktické pořadí a dvojí nastavení třídy.
Refaktor: jednou přiřadíme text i třídu až po rozhodnutí (méně duplicit):
4) Kdy by šel použít zkrácený zápis (ale u nás zůstaneme u if–else)
Někdy jen volíme jeden z krátkých textů. V základním kurzu zůstaneme u if–else:
Typické chyby / záludnosti
-
Přílišné zanoření: Místo
ifuvnitřelsečasto stačíelse if. -
Dlouhé nepopsané výrazy: Bez pojmenovaných mezikroků je záměr nejasný. Pomozte si proměnnými jako
jePlnolety. -
Duplicity po větvích: Stejnou operaci (např.
alert, změna třídy) dělat jednou mimo větvení. -
Nesprávné pořadí testů: První splněná podmínka zastaví vyhodnocování; seřaďte větve od nejpřesnějších k obecnějším.
-
Skryté vedlejší efekty: V podmínce pouze testujte; nepřepisujte proměnné, které pak ovlivní další větve.
-
Záměna
=a===:=přiřazuje,===porovnává typ i hodnotu. -
Nedodržení explicitní negace: V tomto kurzu pište
if (podminka == false)(ekvivalentif (!podminka)uvádějte nejvýše do komentáře).
Shrnutí
-
Rozdělte složité výrazy do pojmenovaných pomocných proměnných.
-
Odstraňte duplicity – společné kroky provádějte jednou.
-
Řaďte podmínky od přesných k obecným, dbejte na záchytnou větev
else. -
Vždy provádějte explicitní porovnání (
===,!==,== true,== false). -
Krátké volby lze zapsat stručně; v tomto kurzu však kvůli čitelnosti zůstáváme u
if–else.
Úloha
Zadání (kontext úlohy):
Máš kód, který rozhoduje zprávu o dopravě podle hodnoty objednávky, členství VIP a volby osobního odběru. Kód je zbytečně zanořený a opakuje stejné akce. Tvým úkolem je kód přepsat (refaktorovat) tak, aby byl čitelný a bez duplicit.
Cíl úlohy:
Rozdělit složitou podmínku do pojmenovaných mezikroků, odstranit duplicity a mít jedno místo pravdy pro zobrazení výsledku (jedno volání alert).
Vstupní podmínky:
-
Student pracuje pouze s nově vytvořeným souborem
script.js. -
Nepřidávej knihovny ani další soubory.
Požadovaný výstup:
-
Vytvoř pomocné proměnné (např.):
-
maNarokNaDopravuZdarma– platí, kdyžcelkem >= 1000nebojeVIP == true. -
osobniOdber– kopie hodnotychceOsobniOdber(pro čitelný název).
-
-
Rozhodnutí napiš pomocí
if – else if – elsebez vnořování. -
V každé větvi pouze nastav text do proměnné
zprava(např."Doprava zdarma"). -
alert(zprava)zavolej právě jednou až po rozhodnutí. -
V podmínkách používej explicitní porovnání (
== true,== false) a pro čísla/řetězce===/!==. -
Chování programu:
-
Pokud
osobniOdber == true→zprava = "Osobní odběr zdarma" -
Jinak pokud
maNarokNaDopravuZdarma == true→zprava = "Doprava zdarma" -
Jinak →
zprava = "Doprava 99 Kč"
-
Řešení úlohy
Co je zde splněno
-
Rozděleny podmínky do pojmenovaných mezikroků (
maNarokNaDopravuZdarma,osobniOdber). -
Žádné zanořené podmínky – struktura
if – else if – elseje přehledná. -
Každá větev pouze nastavuje text do proměnné
zprava. -
Volání
alert()je jen jednou po vyhodnocení. -
Použito explicitní porovnání
== truedle zadání.
Poznámky
-
celkem >= 1000musí být vyhodnocováno pomocí>=, nikoliv>, aby přesně odpovídalo zadání. -
Při použití hodnoty
chceOsobniOdberjako kopie doosobniOdberse zlepšuje srozumitelnost kódu.