Ú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
-
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á.
-
-
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!==.
-
-
Řetězení porovnání
-
V matematice píšeme např.
1 < x < 10. -
V JavaScriptu ale
1 < x < 10nefunguje tak, jak čekáme:-
nejprve se vyhodnotí
1 < x→true/false -
pak se výsledek (
true/false) převede na číslo (1nebo0) a porovná s10.
-
-
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 < cna 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
Řešení úlohy
Co je zde splněno
-
Chybná přiřazení nahrazena přísnými porovnáními
===/!==. -
Řetězení typu
1 < x < 10rozděleno nax >= 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) === 0funguje správně i pro záporná čísla.