Úloha 4 – Refaktoring podmínek: oprava porovnání, řetězení a negací

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: oprava porovnání, řetězení a negací
Vytiskl(a): Nepřihlášený host
Datum: pondělí, 19. října 2026, 06.05

Úvod do úlohy

Když se studenti naučí základy relačních a logických operátorů, dalším krokem je naučit se odhalovat a opravovat typické chyby, které se v reálném kódu objevují velmi často. Tyto chyby jsou někdy drobné, ale mohou způsobit zásadní problémy – od špatně vyhodnocených podmínek až po obtížně odhalitelné logické bugy. Typickým příkladem je záměna přiřazení (=) a porovnání (== nebo ===), nevhodné použití „volného“ porovnání == místo striktního ===, nebo chybné řetězení porovnání bez závorek.

Refaktoringem takových fragmentů kódu si studenti upevní nejen znalost operátorů, ale i dobrou praxi: psát jasný, čitelný a jednoznačný kód, který nebude matoucí ani pro programátora samotného, ani pro jeho kolegy.


Teorie a principy

  1. Záměna = a ==

    • = je přiřazovací operátor → mění hodnotu proměnné.

    • == a === jsou porovnávací operátory → vracejí logickou hodnotu.

    • Pokud místo == napíšeme =, proměnná se přepíše a podmínka může být vždy pravdivá.

  2. Použití == vs. ===

    • == provádí implicitní konverzi typů, což vede k neočekávaným výsledkům.

    • === vyžaduje shodu hodnoty i typu → bezpečnější a čitelnější.

    • V moderním JavaScriptu se doporučuje používat vždy === a !==.

  3. Řetězení porovnání

    • V matematice píšeme např. 1 < x < 10.

    • V JavaScriptu ale 1 < x < 10 nefunguje tak, jak čekáme:

      • nejprve se vyhodnotí 1 < x → true/false

      • pak se výsledek (true/false) převede na číslo (1 nebo 0) a porovná s 10.

    • Správně musíme psát (1 < x) && (x < 10).


Praktické příklady kódu

1. Záměna = a ==

 

2. Použití == místo ===

3. Chybné řetězení porovnání


Typické chyby / záludnosti

  • Nevědomá záměna = a == – program funguje „divně“, ale nepadá, což je zrádné.

  • Přílišné spoléhání na == – může vést k matoucím výsledkům a nečitelnému kódu.

  • Matematické uvažování při řetězení – studenti často zapomenou, že JavaScript neinterpretuje řetězení porovnání jako matematické nerovnosti.

  • Chybějící závorky – u složitějších podmínek je lepší je explicitně vyznačit, i když precedence by to „uhádla“.


Shrnutí

  • = je přiřazení, == a === jsou porovnání.

  • Vždy preferujeme === a !== pro jednoznačnost a bezpečnost.

  • Řetězení porovnání je nutné rozdělit a spojit logickým AND (&&).

  • Refaktoring a jasný zápis podmínek zvyšuje čitelnost a spolehlivost kódu.

Úloha

Zadání (kontext úlohy)

Dostal/a jsi delší úryvek kódu s několika typickými chybami v podmínkách
(přiřazení místo porovnání, špatné řetězení, nevhodné operátory a chybné použití negace).
Tvým úkolem je kód opravit, aby vypsal přesně dané řádky.


Cíl úlohy

Procvičíš si refaktoring spojených podmínek:

  • nahradíš chybné = a nevhodné operátory správnými (===, !==, &&, ||),

  • rozdělíš řetězení typu a < b < c na dvě porovnání spojená &&,

  • doplníš závorky pro jednoznačné vyhodnocování a správně použiješ negaci !.


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

  • Neměníš hodnoty proměnných, opravuješ jen podmínky a závorkování.


Požadovaný výstup

Po opravení kódu musí program vypsat přesně těchto 5 řádků (v libovolném pořadí):


Doplňující pokyny
  • Preferuj === a !== před == a !=.

  • U složených výrazů dej přednost čitelnosti – používej závorky i tam, kde by nebyly nutné.

  • Příklad opravy řetězení:


Soubor

Odkaz na js soubor

Řešení úlohy

Co je zde splněno

  • Chybná přiřazení nahrazena přísnými porovnáními === / !==.

  • Řetězení typu 1 < x < 10 rozděleno na x >= 1 && x <= 10.

  • Použity logické operátory &&, || (zde &&) a správná negace !(...) se závorkami.

  • Doplněny závorky pro jednoznačné vyhodnocení.

  • Program vypíše přesně požadované řádky, pokud proměnné mají očekávané hodnoty; samotná logika je nyní korektní a čitelná.

Poznámky

  • Preferujte vždy ===/!== před ==/!= kvůli shodě typu.

  • U sudosti se může hodit normalizace modula: ((n % 2 + 2) % 2) === 0 funguje správně i pro záporná čísla.