Úloha 3 – Kombinace relačních a logických operátorů
Ú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 < cse č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, pokudaje menší nežb. -
a <= b→ true, pokudaje menší nebo rovnob. -
Totéž platí analogicky pro
>a>=.
-
-
Výsledek složeného výrazu
-
Vždy jde o logickou hodnotu (
truenebofalse). -
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 < cse 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 < bse 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 (
truenebofalse).