Ú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 1je 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ř.
5uprostřed podmínky). Raději vytvoř konstantuMAX_LOGIN_ATTEMPTS = 5. -
U booleanu piš podmínku vždy srovnáním:
if (isVip == true)místo jenif (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" == falseje true). -
Zapomenuté
== truenebo== falseu 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 < 10nefunguje, 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)neboif (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é kontrolyNaNani 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
Ř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
NaNse nikdy nesrovnává pomocí===; použijteNumber.isFinite(neboNumber.isNaN) po explicitním převodu.
localeCompareje stabilní způsob, jak řešit diakritiku a různé varianty písmen bez ohledu na velikost.