Úloha 3 – Priorita a pořadí vyhodnocování operátorů
| Stránky: | Moodle ZČU |
| Kurz: | Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný) |
| Kniha: | Úloha 3 – Priorita a pořadí vyhodnocování operátorů |
| Vytiskl(a): | Guest user |
| Datum: | neděle, 18. října 2026, 09.59 |
Ú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.
Úloha
Zadání (kontext úlohy)
Program často kombinuje více operátorů. Někdy ale výsledek nemusí být takový, jaký čekáme, pokud neznáme jejich pořadí.
Tvým úkolem je vyzkoušet si, jak se mění výsledek při použití závorek.
Cíl úlohy
Procvičíš si precedenci (prioritu) a asociativitu operátorů a naučíš se používat závorky k jednoznačnému určení pořadí výpočtu.
Vstupní podmínky
-
Pracuj pouze s nově vytvořeným souborem
script.js.
Požadovaný výstup
-
Do konzole vypiš výsledek alespoň dvou různých aritmetických výrazů.
-
U prvního výrazu ukaž rozdíl mezi verzí se závorkami a bez závorek.
-
Například
2 + 3 * 4a(2 + 3) * 4.
-
-
U druhého výrazu použij exponentační operátor
**a ukaž, jak se mění výsledek při různém seskupení závorkami.-
Například
2 ** 3 ** 2vs.(2 ** 3) ** 2.
-
Doplňující pokyny
-
Používej
console.log()pro zobrazení výsledků. -
Výrazy si zvol libovolné, ale musí obsahovat alespoň dva různé operátory.
-
Pokud si nejsi jistý výsledkem, zkontroluj ho právě přidáním závorek a porovnej výstup.
Řešení úlohy
Co je zde splněno:
- Použity jsou dva různé aritmetické výrazy.
-
U prvního výrazu je ukázán rozdíl výsledku se závorkami a bez závorek.
-
U druhého výrazu je použit exponentační operátor ** a ukázána změna výsledku při jiném seskupení.
-
Výstup je zobrazen pomocí
console.log().
Poznámky
Exponentační operátor
**má pravou asociativitu, což může být pro studenty překvapivé.Pokud si nejsme jisti výsledkem, závorky vždy pomohou k jednoznačnému vyhodnocení.