Ú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 je false, výsledek je hned false a druhý operand se už neřeší.
    Příklad: false && cokoliv → vždy false.

  • OR (||)
    Pokud první operand je true, výsledek je hned true a druhý operand se už nevyhodnocuje.
    Příklad: true || cokoliv → vždy true.

  • 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 "" nebo 0, 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 && b je 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ůli false, u OR kvůli true).

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
  1. Vytvoř proměnnou uzivatel s hodnotou null.

  2. Vytvoř podmínku, která:

    • Pokud uzivatel existuje a má vlastnost jmeno, vypíše do konzole text: Uživatel: [jméno]

    • Pokud uzivatel není definován, vypíše: Uživatel není přihlášen

  3. Změň uzivatel na objekt s vlastností jmeno a ověř, že kód funguje správně.


Doplňující pokyny
  • Použij logický operátor && k ochraně proti čtení z null.

  • 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á uzivatel s hodnotou null.

  • Použit operátor && k zajištění, že se vlastnost jmeno čte jen pokud uzivatel není null.

  • Pokud je uzivatel null, vypíše se hláška „Uživatel není přihlášen“.

  • Pokud uzivatel existuje a má vlastnost jmeno, vypíše se jeho jméno.

Poznámky

  • Díky zkrácenému vyhodnocování uzivatel && uzivatel.jmeno se druhá část (uzivatel.jmeno) vůbec nevyhodnotí, pokud uzivatel je null.

  • To chrání program před chybou typu „Cannot read property 'jmeno' of null“.