Úvod do úlohy
Relační a logické operátory tvoří základ všech podmínek a rozhodování v programu. Zatímco jednoduchý výraz jako a < b je snadný na čtení i vyhodnocení, složitější kombinace typu a
< b && b <= c už v sobě zahrnuje více operátorů s různou precedencí a asociativitou. Abychom psali správné a čitelné podmínky, musíme rozumět tomu, v jakém pořadí JavaScript tyto výrazy vyhodnocuje, a kdy je nutné použít závorky k jednoznačnému určení.
Schopnost správně analyzovat složené výrazy je klíčová – jinak hrozí, že program bude fungovat jinak, než jsme zamýšleli, a chybu odhalíme až velmi pozdě.
Teorie a principy
-
Precedence (priorita)
-
Relační operátory (<, <=, >, >=) mají vyšší prioritu než logické operátory (&&, ||).
-
Proto se nejprve vyhodnotí porovnání, a teprve pak spojky.
-
Příklad: a < b && b < c se čte jako (a < b) && (b <
c).
-
Asociativita
-
Většina relačních a logických operátorů má levou asociativitu – tedy vyhodnocují se zleva doprava.
-
Výjimkou je logický NOT (!), který je unární a vyhodnocuje se nejdříve.
-
Operátory větší/menší než
-
a < b → true, pokud a je menší než b.
-
a <= b → true, pokud a je menší nebo rovno b.
-
Totéž platí analogicky pro > a >=.
-
Výsledek složeného výrazu
-
Vždy jde o logickou hodnotu (true nebo false).
-
Operátor && (logické AND) vrací true jen tehdy, pokud jsou oba výrazy true.
-
Operátor || (logické OR) vrací true, pokud je alespoň jeden výraz true.
-
Operátor ! (NOT) neguje výsledek výrazu.
Praktické příklady kódu
Jednoduché porovnání v kombinaci s AND
Kombinace AND a OR
Nutnost závorek
Negace
Typické chyby / záludnosti
-
Zapomenutí na prioritu – studenti někdy myslí, že a < b && b <
c se vyhodnocuje postupně zleva doprava bez závorek, ale ve skutečnosti se oba relační výrazy vyhodnotí před AND.
-
Nesprávné použití závorek – příliš mnoho závorek snižuje čitelnost, naopak jejich nedostatek může vést k jinému výsledku, než čekáme.
-
Záměna && a || – AND vyžaduje, aby byly obě podmínky pravdivé, zatímco OR stačí jedna.
-
Negace bez závorky – !a < b se vyhodnotí jako (!a) < b, což může vést k nelogickým výsledkům. Správně bychom měli psát !(a < b).
Shrnutí
-
Relační operátory (<, <=, >, >=) mají vyšší prioritu než logické operátory (&&, ||).
-
Asociativita většiny těchto operátorů je levostranná.
-
Operátor ! má vysokou prioritu a vyhodnocuje se jako první.
-
Výsledek složeného výrazu je vždy logická hodnota (true nebo false).