Ú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" === 5vrací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" == 5vracítrue, protože se řetězec převede na číslo.
-
-
Chování
switch:-
Uvnitř
switchse 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"a5se 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í
-
switchpouží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/elsese hodí tam, kde potřebujeme volnější porovnání (==) nebo složitější logiku. -
switchje 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é
bodyulož hodnotu"90"(řetězec).
Požadovaný výstup:
-
Pomocí
if/elseprogram zjistí, jestlibodyodpoví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").
-
-
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
switchrozpozná jen řetězcové hodnoty, pokud je vstup"90". -
Zkus změnit
bodyz"90"na číslo90a 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á
bodyulož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 číslo90). -
Switch testuje řetězce, takže
"90"najde odpovídající větev. -
Přidána větev
defaultpro 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"a90. -
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
switchse ale nevyhodnotí žádná z řetězcových větví (výsledek půjde dodefault).To ukazuje, že u
switchzáleží nejen na hodnotě, ale i na typu (přísná shoda jako===).