Úloha 4 – Refaktoring podmínek s vedlejšími efekty

Stránky: Moodle ZČU
Kurz: Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný)
Kniha: Úloha 4 – Refaktoring podmínek s vedlejšími efekty
Vytiskl(a): Guest user
Datum: neděle, 18. října 2026, 09.59

Úvod do úlohy

Když už studenti zvládnou logické operátory a jejich kombinace, je důležité zaměřit se na odhalování a opravování chyb. Logické výrazy totiž patří k místům, kde se začátečníci často pletou – jednak kvůli složitosti podmínek, jednak kvůli nejasnostem v prioritách operátorů nebo chování short-circuit evaluace. Umět chyby nejen poznat, ale i vysvětlit, proč k nim dochází, je skvělý krok k tomu, aby psali spolehlivý a čitelný kód.

Teorie a principy

  • Nesprávná negace: Negace ! musí být aplikovaná na správnou část výrazu. Bez závorek často dojde k jinému výsledku, než autor zamýšlel.

  • Chybějící závorky při kombinaci operátorů: Přestože JavaScript má jasně danou prioritu (! > && > ||), v dlouhých podmínkách je snadné se splést.

  • Ignorování short-circuit evaluace: Někdy se spoléháme, že se vyhodnotí všechny části podmínky, ale některé funkce nebo výrazy se přeskočí. To může vést k chybějícím vedlejším efektům.

  • Nepřehledné řetězení podmínek: Pokud má výraz více než 2–3 operátory bez rozdělení nebo komentářů, snadno se ztratí logika.

Praktické příklady chyb a oprav

1. Chybná negace

2. Zapomenuté závorky při kombinaci

3. Ignorování short-circuit chování

Typické chyby / záludnosti

  • Záměna = za == nebo === v podmínkách (místo porovnání dojde k přiřazení).

  • Příliš složité podmínky na jeden řádek – i když jsou syntakticky správné, špatně se čtou a snadno se v nich udělá chyba.

  • Špatné chápání negace u složených výrazů – studenti často zapomenou, že !(a && b) není totéž co !a && b.

  • Neuvědomění si truthy/falsy hodnot – například prázdný řetězec "" nebo číslo 0 mohou způsobit opačné vyhodnocení, než začátečník čeká.

Shrnutí

  • Dávej pozor na to, kam přesně umisťuješ negaci !.

  • Používej závorky k jasnému vyjádření logiky a nezávislost na prioritě operátorů.

  • Pamatuj, že short-circuit evaluace může přeskočit části kódu (např. volání funkcí).

  • U složitých podmínek se vyplatí rozdělení na menší kroky nebo využití mezivýsledků.

Úloha

Zadání (kontext úlohy)

Spravuješ skript, který rozhoduje, zda odeslat newsletter uživateli. V kódu jsou chyby v negacích, závorkách a ve způsobu volání funkce se side-effectem (zápis do logu). Tvým úkolem je podmínky opravit a zpřehlednit.


Cíl úlohy

Procvičíš si správné použití logických operátorů &&, ||, !, závorek a pochopíš, kdy se druhá část výrazu nemusí vyhodnotit (short-circuit).


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


Požadovaný výstup
  • Oprav logiku tak, aby se newsletter odeslal pouze tehdy, když platí všechno z následujícího:

    • uživatel je potvrzen (potvrzen === true),

    • má ověřený e-mail (overenEmail === true),

    • není odhlášen (odhlasen === false),

    • má souhlas se zasíláním (maSouhlas === true).

  • Zajisti, aby se funkce zapisAktivitu() vždy zavolala před rozhodnutím (mimo podmínku), aby ji nepřeskočilo zkrácené vyhodnocování.

  • Použij závorky pro jasnou a čitelnou logiku.

  • Přidej proměnnou maSouhlas (boolean) a zahrň ji do rozhodování – bez souhlasu se nikdy neodesílá.


Doplňující pokyny
  • Dávej pozor, co neguješ – operátor ! aplikuj na přesně tu část, kterou chceš popřít (např. !odhlasen).

  • Pokud je podmínka delší, rozděl ji na více řádků nebo si připrav mezivýsledky.

  • Nepoužívej ==, preferuj === / !==.

  • Nespoléhej na vyhodnocení uvnitř if s voláním funkce; side-effecty dělej mimo podmínku.


Soubor

Odkaz na js soubor

Řešení úlohy

Co je zde splněno

  • Opraveny chyby v původní logice (!potvrzen && ... → správně jako pozitivní kontroly a jedna negace jen u odhlasen).

  • Funkce zapisAktivitu() se volá před vyhodnocením podmínky, aby nebyla přeskočena kvůli short-circuit.

  • Přidána podmínka maSouhlas, bez které se newsletter nikdy neodesílá.

  • Použity mezivýsledky (jePotvrzen, maOverenyEmail …) pro lepší čitelnost a přehlednost.

  • Logika je zapsaná pomocí && a závorek jednoznačně.

Poznámky

  • Tento přístup je čitelnější než vnořené podmínky na jednom řádku – dobře ukazuje, co přesně se kontroluje.

  • Pokud by bylo cílem mít stručný zápis, šlo by použít i přímo: