Úloha 5 – Refaktoring podmínek: predikáty, guard clauses a short-circuit

Stránky: Moodle ZČU
Kurz: Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný)
Kniha: Úloha 5 – Refaktoring podmínek: predikáty, guard clauses a short-circuit
Vytiskl(a): Nepřihlášený host
Datum: neděle, 18. října 2026, 15.06

Úvod do úlohy

Úvod do úlohy – Jak psát čitelné podmínky

Podmínky v JavaScriptu používáme všude – určují, co se má stát, když je něco pravda, a co se má stát, když to pravda není. Proto je důležité naučit se podmínky psát nejen správně, ale i tak, aby byly snadno čitelné. Čitelný kód pomůže tobě i ostatním lidem, kteří budou tvůj program číst.


Teorie a principy

  • Komentuj „proč“ a ne „co“
    Místo // zvýšíme věk o 1 je lepší napsat // posun na další krok registrace. Komentář by měl vysvětlovat důvod.

  • Používej bezpečné porovnávání

    • Vždy piš === a !== (nikdy jen == nebo !=).

    • Díky tomu se nebudou dít neočekávané převody typů (např. "0" == false).

  • Struktura podmínek

    • Začni jednoduchými podmínkami a až potom řeš složitější.

    • Když se něco nedá provést, ukonči funkci hned na začátku – říká se tomu guard clause.

  • Používej jasné proměnné

    • Nepiš „kouzelná čísla“ (např. 5 uprostřed podmínky). Raději vytvoř konstantu MAX_LOGIN_ATTEMPTS = 5.

    • U booleanu piš podmínku vždy srovnáním: if (isVip == true) místo jen if (isVip).


Praktické příklady

1) Kontrola ceny nebo VIP zákazníka

2) Kontrola věku

3) Maximální počet pokusů o přihlášení

4) Jednoduchý HTML/JS příklad


Typické chyby

  • Použití == místo === → může vést k chybám (např. "0" == false je true).

  • Zapomenuté == true nebo == false u boolean proměnných – pro začátečníky to bývá méně jasné.

  • Dlouhé podmínky spojené vícekrát && a || → je lepší je rozdělit na menší části.

  • Záměna řetězení: 1 < x < 10 nefunguje, je nutné psát (x > 1) && (x < 10).


Shrnutí

  • Piš podmínky tak, aby byly srozumitelné na první pohled.

  • Používej === a !== místo == a !=.

  • U booleanu používej srovnání: if (isVip == true) nebo if (isVip == false).

  • Začínej jednoduchými testy, složitější nechávej na později.

  • Používej konstanty místo čísel přímo v podmínkách.

Úloha

Zadání (kontext úlohy)

Dostal/a jsi kratší skript s „reálnými“ chybami v podmínkách a horší čitelností.
Tvým úkolem je kód opravit a zrefaktorovat, aby byl:

  • jednoznačný (=== / !==),

  • čitelný (guard clauses, pojmenované predikáty),

  • a lehce efektivnější (krátké vyhodnocování, bez zbytečných výpočtů).


Cíl úlohy
  • Použít striktní porovnání a explicitní převody typů.

  • Rozdělit složitější podmínky do pojmenovaných predikátů a přidat stručné komentáře proč.

  • Zavést guard clauses a vyhnout se magickým číslům.

  • Seřadit testy od levných k nákladnějším a využít krátké vyhodnocování.


Vstupní podmínky
  • Pracuješ pouze s přiloženým souborem script.js.

  • Neměň data (hodnoty objektů a polí), upravuj jen:

    • podmínky,

    • strukturu kódu,

    • komentáře.


Požadovaný výstup

Po úpravách musí skript při spuštění vypsat přesně:


Doplňující pokyny
  • Přidej stručné komentáře „proč“ tam, kde upravíš logiku.

  • Zaveď konstanty místo magických čísel (např. const MIN_AGE = 18;).

  • Nepoužívej ==/!=, nepřímé kontroly NaN ani zbytečné opakované výpočty.

  • Guard clauses použij například k rychlému ukončení funkce při nesplnění jednoduchých podmínek.


Soubor

Odkaz na js soubor

Řešení úlohy

Co je zde splněno

  • Všechny podmínky používají striktní porovnání a explicitní převody (Number(...), Number.isFinite).

  • Zavedeno několik guard clauses pro rychlé ukončení a jasnou logiku.

  • Odstraněna magická čísla – nahrazena pojmenovanými konstantami.

  • Testy jsou seřazeny od levných k nákladným; využito krátké vyhodnocování.

  • Složitější logika byla rozdělena do pojmenovaných predikátů s krátkými komentáři „proč“.

  • Řazení probíhá česky pomocí localeCompare('cs', {sensitivity: 'base'}).

Poznámky

  • NaN se nikdy nesrovnává pomocí ===; použijte Number.isFinite (nebo Number.isNaN) po explicitním převodu.

  • localeCompare je stabilní způsob, jak řešit diakritiku a různé varianty písmen bez ohledu na velikost.