Úloha 3 – Priorita a pořadí vyhodnocování operátorů
Úvod do úlohy
Když píšeme výrazy v JavaScriptu, často kombinujeme více různých operátorů – například +, -, *, /, % nebo i logické operátory jako && a ||. Možná se vám zdá, že počítač prostě vše vyhodnotí „zleva doprava“, ale ve skutečnosti to tak není. Programovací jazyky (včetně JavaScriptu) mají přesně daná pravidla precedence (priorita operátorů) a asociativity (směr vyhodnocování). Pokud těmto pravidlům nerozumíme, můžeme dostat úplně jiný výsledek, než bychom čekali. Umět číst i psát složitější výrazy bez závorek, nebo naopak umět závorkami jednoznačně určit pořadí výpočtu, je proto základní dovedností každého programátora.
Teorie a principy
-
Precedence (priorita)
-
Určuje, který operátor se vyhodnotí dříve.
-
Například
*a/mají vyšší prioritu než+a-. -
Proto
2 + 3 * 4není(2 + 3) * 4, ale2 + (3 * 4)→ výsledek je14.
-
-
Asociativita (směr vyhodnocování)
-
Řeší, jak se vyhodnocují operátory se stejnou prioritou.
-
Většina aritmetických operátorů (
+,-,*,/,%) se vyhodnocuje zleva doprava. -
Některé jiné, například přiřazovací (
=,+=,-=) nebo exponentační (**), mají pravou asociativitu. -
Příklad:
2 ** 3 ** 2je2 ** (3 ** 2)→2 ** 9→512, nikoli(2 ** 3) ** 2.
-
-
Závorky
-
Mají vždy nejvyšší prioritu.
-
Používáme je, když chceme, aby počítač postupoval podle našeho záměru a ne jen podle obecných pravidel.
-
Praktické příklady kódu
Aritmetické operátory
Exponentace a asociativita
Kombinace více operátorů
Typické chyby / záludnosti
-
Ignorování závorek: studenti často předpokládají, že program vyhodnocuje operace stejně, jako by to „četli v hlavě“. To ale vede k chybám.
-
Exponentace: mnoho lidí si myslí, že
2 ** 3 ** 2je(2 ** 3) ** 2, protože jsou zvyklí na levou asociativitu. -
Kombinace aritmetických a logických operátorů: například
true || false && falsedávátrue, protože&&má vyšší prioritu než||. -
Přiřazovací operátory:
a = b = 5se vyhodnocuje zprava, takže nejprveb = 5, paka = b.
Shrnutí
-
Precedence určuje, který operátor má přednost.
-
Asociativita určuje, zda se operátory stejné priority vyhodnocují zleva nebo zprava.
-
Závorky mají vždy nejvyšší prioritu a slouží k jednoznačnému určení pořadí výpočtu.
-
Nejčastější pasti: exponentace, kombinace logických operátorů a řetězení přiřazení.
-
Pokud si nejsme jistí, vždy je lepší závorky výslovně napsat – kód bude čitelnější a méně náchylný k chybám.