Úloha 3 – Kombinace if/else a switch pro vyhodnocení výsledku

Website: Moodle ZČU
Kurs: Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný)
Buch: Úloha 3 – Kombinace if/else a switch pro vyhodnocení výsledku
Gedruckt von: Nepřihlášený host
Datum: Sonntag, 18. Oktober 2026, 05:55

Úvod do úlohy

Když používáme switch, je důležité si uvědomit, že v JavaScriptu porovnává přísně – tedy stejně, jako kdybychom použili operátor ===. To znamená, že porovnává nejen hodnotu, ale i datový typ. Proto se může stát, že i když dvě hodnoty na první pohled vypadají stejně, switch je nebude považovat za shodné. Tento blok cvičení vám pomůže pochopit, proč je někdy switch bezpečnější (chrání před nechtěnými konverzemi typů), ale v jiných případech je naopak praktičtější použít klasické if/else.

Teorie a principy

  • Striktní rovnost (===):

    • Hodnota a datový typ musí být shodné.

    • Příklad: "5" === 5 vrací false, protože vlevo je řetězec a vpravo číslo.

  • Volná rovnost (==):

    • Porovnává jen hodnotu a při tom provádí konverzi typů.

    • "5" == 5 vrací true, protože se řetězec převede na číslo.

  • Chování switch:

    • Uvnitř switch se vždy používá striktní porovnání (===).

    • To může být výhoda (přesné vyhodnocení), ale i zdroj zmatků, pokud očekáváte chování jako při ==.

Praktické příklady kódu

1. Switch s číslem vs. řetězcem

 Výsledek: spustí se větev "1", protože jen ta se shoduje typem i hodnotou.


2. Rozdíl mezi if a switch


3. Situace, kdy je lepší if/else
Pokud musíme povolit různé datové typy (např. číslo i řetězec), je vhodnější použít if/else s == nebo s kombinovanými podmínkami:


4. Situace, kdy je switch bezpečnější

 Tady je switch přesnější – rozlišuje číslo a řetězec.

Typické chyby / záludnosti

  • Očekávání, že switch funguje jako == – studenti se často diví, že "5" a 5 se neshodují.

  • Nepohlídání datového typu vstupu – při načítání z formuláře dostaneme obvykle řetězec, i když to „vypadá jako číslo“.

  • Nevhodný výběr konstrukce – pokud chceme rozlišovat více typů (číslo i text), je přehlednější použít if/else.

Shrnutí

  • switch používá striktní porovnávání (===).

  • Rozlišuje nejen hodnotu, ale i datový typ.

  • Vstup z formuláře bývá řetězec, takže se nemusí shodovat s číslem.

  • if/else se hodí tam, kde potřebujeme volnější porovnání (==) nebo složitější logiku.

  • switch je naopak užitečný tam, kde chceme mít jistotu, že typy i hodnoty opravdu sedí.

Úloha

Zadání (kontext úlohy):

Máš program, který hodnotí výsledek testu. Nejprve musí zjistit, zda je vstup číslo nebo řetězec (protože může přijít z formuláře). Potom podle bodů určí známku.


Cíl úlohy:

Procvičit rozdíl mezi volným porovnáváním (==) a striktním (===), kombinaci if/else a switch, a pochopit, proč je někdy potřeba kontrolovat typ.


Vstupní podmínky:
  • Student pracuje pouze s nově vytvořeným souborem script.js.

  • Do proměnné body ulož hodnotu "90" (řetězec).


Požadovaný výstup:
  1. Pomocí if/else program zjistí, jestli body odpovídá číslu 90 i když je to řetězec:

    • Pokud body == 90 → alert("Shoda díky == (string se převede na číslo)").

    • Pokud body === 90 → alert("Shoda jen pokud je to skutečné číslo").

  2. Poté použij switch (body) a rozhodni známku:

    • "100" → alert("Perfektní – známka 1")

    • "90" → alert("Výborně – známka 1")

    • "75" → alert("Chvalitebně – známka 2")

    • "60" → alert("Dobře – známka 3")

    • default → alert("Výsledek není v tabulce")


Doplňující pokyny:
  • Všimni si, že switch rozpozná jen řetězcové hodnoty, pokud je vstup "90".

  • Zkus změnit body z "90" na číslo 90 a sleduj rozdíl.

  • Přidej do kódu oba testy (== a ===), aby byl kontrast jasně vidět.

Řešení úlohy

Co je zde splněno

  • Proměnná body uložena jako řetězec "90".

  • Ukázáno volné porovnání == (string "90" se převede na číslo).

  • Ukázáno striktní porovnání === (string "90" není totéž jako číslo 90).

  • Switch testuje řetězce, takže "90" najde odpovídající větev.

  • Přidána větev default pro neznámé hodnoty.

Vylepšení oproti začátečnické verzi

  • Ukázán převod Number(body), aby bylo jedno, jestli vstup přijde jako řetězec nebo číslo.

  • Switch už pracuje nad číslem, takže není třeba rozlišovat mezi "90" a 90.

  • Použit zkrácený zápis s ternárním operátorem pro testování == a === (to je vhodné pro pokročilé, ale není pro začátečníky).

Poznámky

  • Pokud změníš let body = 90; (číslo), pak:

    • body == 90 → platí.

    • body === 90 → platí.

    • Ve switch se ale nevyhodnotí žádná z řetězcových větví (výsledek půjde do default).

  • To ukazuje, že u switch záleží nejen na hodnotě, ale i na typu (přísná shoda jako ===).