Úloha 4 – Refaktoring podmínek: oprava porovnání, řetězení a negací
Ú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.