NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Lekce 6 - Podmínky podruhé: Konstrukce switch v JavaScriptu

V minulé lekci, Podmínky v JavaScriptu, jsme se naučili programovat podmínky v JavaScriptu.

V dnešním tutoriálu základů JavaScriptu se naučíme skládat podmínky za pomoci logických operátorů. Následně se podíváme na konstrukci switch a vytvoříme se jednoduchou kalkulačku.

Skládání podmínek

Podmínky je možné skládat, a to pomocí dvou základních logických operátorů:

Operátor C-like Zápis
A zároveň &&
Nebo ||

Znak & neboli ampersand napíšeme pomocí klávesy pravý Alt a C. Uvedeme si rovnou také znak | (tzv. pipe neboli trubka), který se napíše pomocí pravého Alt a písmene W:

AND a OR - Základní konstrukce jazyka JavaScript

Ukažme si jednoduchý příklad:

let aktualniCas = new Date();
if ((aktualniCas.getHours() > 5) && (aktualniCas.getHours() < 18)) {
    document.write("Dobrý den");
} else {
    document.write("Dobrý večer");
}

Uvedený kód vypíše Dobrý den pokud je aktuální hodina větší než 5 ráno a zároveň menší než 18 (6 večer):

Pozdrav v JavaScriptu
localhost

S tím si zatím vystačíme, operátory se pomocí závorek samozřejmě dají kombinovat:

let cislo = parseInt(prompt("Zadejte číslo v rozmezí 10-20 nebo 30-40:"));
if (((cislo >= 10) && (cislo <= 20)) || ((cislo >= 30) && (cislo <= 40))) {
    document.write("Zadal jsi správně");
} else {
    document.write("Zadal jsi špatně");
}

Pokud zadáme číslo v uvedeném rozmezí, dostaneme tento výstup:

Podmínky v JavaScriptu
localhost

V opačném případě se nám v prohlížeči vypíše:

Podmínky v JavaScriptu
localhost

Pozdrav na web

Vraťme se ale k našemu pozdravu na webu. Zkusme si s podmínkami pohrát tak, aby skript uměl pozdravit návštěvníka stránek podle denní doby. Budeme tedy vypisovat pozdravy Dobré ráno, Dobré dopoledne, Dobré poledne, Dobré odpoledne, Dobrý večer a Dobrou noc. Jistě to zvládneme, stačí vložit více podmínek za sebe a vhodně nastavit časy. Nesmíme zapomenout na použití operátorů s rovná se (tedy >=, <=):

let aktualniCas = new Date();
let aktualniHodina = aktualniCas.getHours();

if ((aktualniHodina >= 5) && (aktualniHodina <= 9)) {
    document.write("Dobré ráno");
} else if ((aktualniHodina >= 10) && (aktualniHodina <= 11)) {
    document.write("Dobré dopoledne");
} else if (aktualniHodina == 12) {
    document.write("Dobré poledne");
} else if ((aktualniHodina >= 13) && (aktualniHodina <= 17)) {
    document.write("Dobré odpoledne");
} else if ((aktualniHodina >= 18) && (aktualniHodina <= 21)) {
    document.write("Dobrý večer");
} else {
    document.write("Dobrou noc");
}

Všimněme si, že u posledního else již není žádné if. Jakmile se program dostane až sem, nezbývá jiná možnost, než že je noc a je zbytečné to ověřovat.

V prohlížeči pak uvidíme výstup:

Pozdrav v JavaScriptu
localhost

Konstrukce switch

Pokud v podmínkách reagujeme na různé hodnoty jedné proměnné, můžeme místo sekvence if-else if použít konstrukci switch. Konstrukce switch je optimální pro situace, kdy máme jednu proměnnou nabývající mnoha možných hodnot a chceme na základě této hodnoty provést různé akce. Sekvence if a else je oproti tomu flexibilnější v tom smyslu, že umožňuje kombinovat více různých podmínek a logických operátorů.

Příklad s else if

Konstrukce switch nám v některých případech umožňuje (relativně) zjednodušit zápis více podmínek pod sebou. Ukažme si příklad, kdy chceme přepsat číslo slovy. Bez konstrukce switch bychom napsali kód podobný tomuto:

let hodnota = parseInt(prompt("Zadej číslo:"));
let slovy;

if (hodnota == 1) {
    slovy = "jedna";
} else if (hodnota == 2) {
    slovy = "dva";
} else if (hodnota == 3) {
    slovy = "tři";
} else {
    slovy = "nevím";
}

document.write(slovy);

Všimněme si, že jsme proměnnou slovy deklarovali na začátku, jen tak do ni můžeme potom přiřazovat. Kdybychom ji deklarovali u každého přiřazení, kód by vyhodil chybu. Proměnná může být deklarována (založena v paměti) vždy jen jednou.

Program by v tomto případě fungoval stejně i bez těch else, ale nač se dále ptát, pokud jsme již našli odpovídající hodnotu.

Řešení pomocí konstrukce switch

Nyní si zkusíme napsat ten samý kód pomocí konstrukce switch. Protože funkce prompt() vrací uživatelský vstup jako textový řetězec, využijeme funkci parseInt(), která nám vrátí celé číslo. Pro získání desetinného čísla bychom použili funkci parseFloat():

let hodnota = parseInt(prompt("Zadej číslo:"));
let slovy;

switch (hodnota) {
    case 1:
        slovy = "jedna";
        break;
    case 2:
        slovy = "dva";
        break;
    case 3:
        slovy = "tři";
        break;
    default:
        slovy = "nevím";
}
document.write(slovy);

Pokud zadáme například číslo 3, bude výstupem v prohlížeči:

Switch v JavaScriptu
localhost

Jestliže nezadáme žádné ze tří uvedených čísel, v prohlížeči se vypíše:

Switch v JavaScriptu
localhost

Syntaxe vychází z jazyka C a příkazy jednotlivých větví se nepíší do složených závorek. Oddělují se příkazem break, který způsobí vyskočení z celé konstrukce switch. To může být pro začátečníky nepřirozené a dá se na to lehce zapomenout. Pokud se nevykoná ani jeden případ, spustí se větev default, což je obdobou posledního else.

Je jen na vás, jestli budete konstrukci switch používat, obecně se vyplatí jen při větším množství příkazů a vždy jde nahradit sekvencí if a else.

Jednoduchá kalkulačka

Pojďme si ještě vytvořit jednoduchou kalkulačku. Číselné vstupy nastavíme přímo v kódu a uživatele necháme vybrat pouze početní operaci. Bez konstrukce switch by kód kalkulačky vypadal takto:

let a = 9;
let b = 3;

document.write("Vítejte v kalkulačce <br />");

let volba = parseInt(prompt("Zadejte číslo operace:\n1 - sčítání\n2 - odčítání\n3 - násobení\n4 - dělení"));
let priklad = "";

if (volba == 1) {
    priklad = `${a} + ${b} = ${a + b}`;
} else if (volba == 2) {
    priklad = `${a} - ${b} = ${a - b}`;
} else if (volba == 3) {
    priklad = `${a} * ${b} = ${a * b}`;
} else if (volba == 4) {
    priklad = `${a} / ${b} = ${a / b}`;
}

if (volba > 0 && volba < 5) {
    document.write("Výsledek: " + priklad + "<br />");
} else {
    document.write("Neplatná volba <br />");
}

document.write("<br /> Děkuji za použití kalkulačky.");

A nyní v kalkulačce použijme konstrukci switch:

let a = 9;
let b = 3;

document.write("Vítejte v kalkulačce <br />");

let volba = parseInt(prompt("Zadejte číslo operace:\n1 - sčítání\n2 - odčítání\n3 - násobení\n4 - dělení"));
let priklad = "";

switch (volba) {
    case 1:
        priklad = `${a} + ${b} = ${a + b}`;
        break;
    case 2:
        priklad = `${a} - ${b} = ${a - b}`;
        break;
    case 3:
        priklad = `${a} * ${b} = ${a * b}`;
        break;
    case 4:
        priklad = `${a} / ${b} = ${a / b}`;
        break;
    default:
        priklad = "Neplatná volba";
}

document.write("Výsledek: " + priklad + "<br />");

document.write("<br />Děkuji za použití kalkulačky.");

Vidíme, že kód je trošku přehlednější. Nemusíme další podmínkou ověřovat, zda uživatel zvolil jednu ze čtyř možností. O neplatné volbě jej informujeme přímo ve větvi default.

Výstup kalkulačky pak vypadá například takto:

Kalkulačka v JavaScriptu
localhost

V následujícím cvičení, Řešené úlohy k 5.-6. lekci JavaScriptu, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 145x (4.88 kB)
Aplikace je včetně zdrojových kódů v jazyce JavaScript

 

Předchozí článek
Podmínky v JavaScriptu
Všechny články v sekci
Základní konstrukce jazyka JavaScript
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 5.-6. lekci JavaScriptu
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
502 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity