Úloha 2 – Zkrácené vyhodnocování (short-circuit) v podmínkách
| Site: | Moodle ZČU |
| Course: | Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný) |
| Book: | Úloha 2 – Zkrácené vyhodnocování (short-circuit) v podmínkách |
| Printed by: | Nepřihlášený host |
| Date: | Sunday, 18 October 2026, 1:18 PM |
Úvod do úlohy
Když už umíme používat základní logické operátory &&, || a !, je dobré podívat se hlouběji na to, jak přesně JavaScript vyhodnocuje složené podmínky. Programátoři si často myslí, že se vyhodnotí všechny části výrazu, ale ve skutečnosti to není vždy pravda. JavaScript (a většina jazyků) používá tzv. zkrácené vyhodnocování (short-circuit evaluation). To znamená, že pokud už lze výsledek zjistit z první části, druhá část se vůbec nevyhodnocuje. Tento princip je velmi užitečný, ale může vést i k nečekaným chybám, pokud si ho neuvědomujeme.
Teorie a principy
-
AND (
&&)
Pokud první operand jefalse, výsledek je hnedfalsea druhý operand se už neřeší.
Příklad:false && cokoliv→ vždyfalse. -
OR (
||)
Pokud první operand jetrue, výsledek je hnedtruea druhý operand se už nevyhodnocuje.
Příklad:true || cokoliv→ vždytrue. -
Vedlejší efekty
Pokud jsou v podmínkách volání funkcí nebo operace s efekty (např. změna proměnné, výpis do konzole), nemusí k nim dojít, protože vyhodnocování se zastaví.
Praktické příklady kódu
1. Kratší vyhodnocení s &&
2. Kratší vyhodnocení s ||
3. Praktické využití – kontrola existence
Typické chyby / záludnosti
-
Nečekané přeskočení volání funkce – studenti zapomenou, že funkce se nemusí vykonat, pokud první podmínka rozhodne o výsledku.
-
Používání OR místo defaultní hodnoty – často se používá idiom
let jmeno = vstup || "Neznámý";, ale ten selhává u hodnot jako""nebo0, které jsou falsy, i když mohou být validní. -
Záměna se sekvenčním vyhodnocováním – studenti se mohou mylně domnívat, že
a && bje totéž co „spustit a, pak b“. Ve skutečnosti druhá část nemusí proběhnout. -
Nerozlišování mezi
&&a||– je třeba jasně chápat, že zastavení nastává z opačných důvodů (u AND kvůlifalse, u OR kvůlitrue).
Shrnutí
-
JavaScript používá zkrácené vyhodnocování:
-
false && ...→ druhá část se neprovádí. -
true || ...→ druhá část se neprovádí.
-
-
Tento princip šetří čas i zdroje a využívá se např. při ochraně před chybami typu „čtení z null“.
-
Je však nutné dávat pozor na vedlejší efekty a správné pochopení truthy/falsy hodnot.
Úloha
Zadání (kontext úlohy)
Potřebuješ otestovat, jestli existuje uživatel a má nastavené jméno.
Pokud uživatel není definován, program se nesmí pokusit číst vlastnost, aby nespadl s chybou.
Cíl úlohy
Procvičíš si princip zkráceného vyhodnocování (&& a ||) a uvidíš, že druhá část podmínky se nemusí provést, pokud první část vrátí false.
Vstupní podmínky
-
Pracuješ pouze s nově vytvořeným souborem
script.js.
Požadovaný výstup
-
Vytvoř proměnnou
uzivatels hodnotounull. -
Vytvoř podmínku, která:
-
Pokud
uzivatelexistuje a má vlastnostjmeno, vypíše do konzole text:Uživatel: [jméno] -
Pokud
uzivatelnení definován, vypíše:Uživatel není přihlášen
-
-
Změň
uzivatelna objekt s vlastnostíjmenoa ověř, že kód funguje správně.
Doplňující pokyny
-
Použij logický operátor
&&k ochraně proti čtení znull. -
Pamatuj, že při zkráceném vyhodnocování se druhá část výrazu neprovede, pokud první část vrátí
false.
Řešení úlohy
Co je zde splněno
-
Vytvořena proměnná
uzivatels hodnotounull. -
Použit operátor
&&k zajištění, že se vlastnostjmenočte jen pokuduzivatelnenínull. -
Pokud je
uzivatelnull, vypíše se hláška „Uživatel není přihlášen“. -
Pokud
uzivatelexistuje a má vlastnostjmeno, vypíše se jeho jméno.
Poznámky
Díky zkrácenému vyhodnocování
uzivatel && uzivatel.jmenose druhá část (uzivatel.jmeno) vůbec nevyhodnotí, pokuduzivateljenull.To chrání program před chybou typu „Cannot read property 'jmeno' of null“.