Úloha 5 – Predikáty a strážné podmínky (guard clauses) v rozhodování

Úvod do úlohy

Podmínky v kódu rozhodují, co se stane dál: „Když platí A, udělej B, jinak C.“ Když jsou ale podmínky příliš dlouhé nebo se opakují, kód se špatně čte a hůř opravuje. V této úloze si ukážeme, jak podmínky zjednodušit: rozdělíme je na malé pojmenované kontroly (říkáme jim predikáty) a naučíme se používat stručné odmítnutí na začátku funkce (tzv. guard clause). Díky tomu bude kód čitelnější a bezpečnější pro budoucí změny.


Teorie a principy

  • Predikát (pojmenovaná kontrola)
    Je to malá funkce, která vrátí true nebo false. Např. jeDospely(vek) místo psaní vek >= 18 všude. Kód se pak snáz čte.

  • Strážná podmínka (guard clause)
    Na začátku funkce rychle ukončíme neplatné situace (return), a tím zmenšíme vnoření ifů. Čtenář hned ví, co nejde.

  • Komentuj „proč“, ne „co“
    Kód říká co se děje. Krátkým komentářem vysvětli proč to tak je (doménové pravidlo, limit, výjimka).

  • Jednoduché → složitější
    Nejdřív proveď levné a jednoduché testy (např. zda proměnná existuje), teprve pak ty složitější.

  • Boolean srovnávej výslovně
    Pro začátek klidně piš if (jeVip == true) a if (jePrihlasen == false). Je to delší, ale jasné.


Praktické příklady kódu

1) Predikáty + guard clauses (zjednodušený příklad bez objektů)

Poznámka k ekvivalentům:

  • if (jeVip) je totéž co if (jeVip == true)

  • if (!prihlasen) je totéž co if (prihlasen == false)

Pro začátečníky ale necháváme výslovné porovnání, ať je logika vidět na první pohled.


2) Rozbití dlouhé podmínky na pojmenované mezivýsledky

Takhle se složitější výraz rozloží na čitelné kousky (proměnné se srozumitelnými názvy).


3) Mini HTML stránka s guard clause (ověření věku)


Typické chyby / záludnosti

  • Příliš dlouhá podmínka v jednom if
    Rozděl ji na predikáty a pojmenované mezivýsledky (jeDostatecnyVek, maSpravnouRoli…).

  • Negace, které matou
    if (!prihlasen == true) je matoucí na čtení. Pro začátek piš raději if (prihlasen == false).

  • Kód bez „rychlého odmítnutí“
    Když je vstup špatný, skonči hned (return). Zbytečně se pak nevrství if vnoření.

  • Chybějící vysvětlení „proč“
    Krátký komentář u pravidla (např. „limit 200 Kč kvůli logistice“) výrazně pomáhá čtení.

  • Míchání různých typů bez kontroly
    Před porovnáním čísla používej Number(x) a ověř Number.isNaN(...) == false.


Shrnutí

  • Predikáty = malé funkce vracející true/false, které dělají kód čitelnější.

  • Guard clauses = rychlé odmítnutí neplatných stavů na začátku funkce.

  • Rozděl složité výrazy na pojmenované mezivýsledky s jasnými názvy.

  • Komentuj „proč“, ne „co“.

  • Pro začátečníky klidně piš == true / == false u booleanů pro větší srozumitelnost.

  • Nejdřív jednoduché kontroly, až potom ty složitější.