Ú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ítruenebofalse. Např.jeDospely(vek)místo psanívek >= 18vš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)aif (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éž coif (jeVip == true) -
if (!prihlasen)je totéž coif (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ějiif (prihlasen == false). -
Kód bez „rychlého odmítnutí“
Když je vstup špatný, skonči hned (return). Zbytečně se pak nevrstvíifvnoř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žívejNumber(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/== falseu booleanů pro větší srozumitelnost. -
Nejdřív jednoduché kontroly, až potom ty složitější.