Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

6. diel - Podmienky druhýkrát - Konštrukcia switch v JavaScripte

V minulej lekcii, Podmienky v JavaScripte, sme sa naučili programovať podmienky v JavaScripte.

V dnešnom tutoriále základov JavaScriptu sa naučíme skladať podmienky za pomoci logických operátorov. Následne sa pozrieme na konštrukciu switch a vytvoríme sa jednoduchú kalkulačku.

Skladanie podmienok

Podmienky je možné skladať, a to pomocou dvoch základných logických operátorov:

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

Znak & alebo ampersand napíšeme pomocou klávesy pravý Alt a C. Uvedieme si rovno aj znak | (tzv. pipe alebo rúrka), ktorý sa napíše pomocou pravého Alt a písmena W:

AND a OR - Základné konštrukcie jazyka JavaScript

Ukážme si jednoduchý príklad:

let currentTime = new Date();
if ((currentTime.getHours() > 5) && (currentTime.getHours() < 18)) {
    document.write("Good day");
} else {
    document.write("Good evening");
}

Uvedený kód vypíše Good day pokiaľ je aktuálna hodina väčšia ako 5 ráno a zároveň menšia ako 18 (6 večer):

Greeting in JavaScript
localhost

S tým si zatiaľ vystačíme, operátormi sa pomocou zátvoriek samozrejme dajú kombinovať:

let number = parseInt(prompt("Enter a number between 10-20 or 30-40:"));
if (((number >= 10) && (number <= 20)) || ((number >= 30) && (number <= 40))) {
    document.write("Correct input");
} else {
    document.write("Incorrect input");
}

Pokiaľ zadáme číslo v uvedenom rozmedzí, dostaneme tento výstup:

Conditions in JavaScript
localhost

V opačnom prípade sa nám v prehliadači vypíše:

Conditions in JavaScript
localhost

Pozdrav na web

Vráťme sa ale k nášmu pozdravu na webe. Skúsme sa s podmienkami pohrať tak, aby skript vedel pozdraviť návštevníka stránok podľa dennej doby. Budeme teda vypisovať pozdravy Good morning, Good afternoon, Good evening a Good night. Iste to zvládneme, stačí vložiť viac podmienok za seba a vhodne nastaviť časy. Nesmieme zabudnúť na použitie operátorov s rovná sa (teda >=, <=):

let currentTime = new Date();
let currentHour = currentTime.getHours();

if ((currentHour >= 5) && (currentHour <= 11)) {
    document.write("Good morning");
} else if ((currentHour >= 12) && (currentHour <= 17)) {
    document.write("Good afternoon");
} else if ((currentHour >= 18) && (currentHour <= 21)) {
    document.write("Good evening");
} else {
    document.write("Good night");
}

Všimnime si, že u posledného else už nie je žiadne if. Akonáhle sa program dostane až sem, nezostáva iná možnosť, než že je noc a je zbytočné to overovať.

V prehliadači potom uvidíme výstup:

Greeting in JavaScript
localhost

Konštrukcia switch

Pokiaľ v podmienkach reagujeme na rôzne hodnoty jednej premennej, môžeme namiesto sekvencie if - else if použiť konštrukciu switch. Konštrukcia switch je optimálna pre situácie, keď máme jednu premennú nadobúdajúcu mnoho možných hodnôt a chceme na základe tejto hodnoty vykonať rôzne akcie. Sekvencia if a else je oproti tomu flexibilnejšia v tom zmysle, že umožňuje kombinovať viacero rôznych podmienok a logických operátorov.

Príklad s else if

Konštrukcia switch nám v niektorých prípadoch umožňuje (relatívne) zjednodušiť zápis viacerých podmienok pod sebou. Ukážme si príklad, kedy chceme prepísať číslo slovami. Bez konštrukcie switch by sme napísali kód podobný tomuto:

let value = parseInt(prompt("Enter a number:"));
let inWords;

if (value == 1) {
    inWords = "one";
} else if (value == 2) {
    inWords = "two";
} else if (value == 3) {
    inWords = "three";
} else {
    inWords = "I don't know";
}
document.write(inWords);

Všimnime si, že sme premennou inWords deklarovali na začiatku, len tak do nej môžeme potom priraďovať. Keby sme ju deklarovali pri každom priradení, kód by vyhodil chybu. Premenná môže byť deklarovaná (založená v pamäti) vždy len raz.

Program by v tomto prípade fungoval rovnako aj bez tých else, ale načo sa ďalej pýtať, ak sme už našli zodpovedajúcu hodnotu.

Riešenie pomocou konštrukcie switch

Teraz si skúsime napísať ten istý kód pomocou konštrukcie switch. Pretože funkcia prompt() vracia užívateľský vstup ako textový reťazec, využijeme funkciu parseInt(), ktorá nám vráti celé číslo. Na získanie desatinného čísla by sme použili funkciu parseFloat():

let value = parseInt(prompt("Enter a number:"));
let inWords;

switch (value) {
    case 1:
        inWords = "one";
        break;
    case 2:
        inWords = "two";
        break;
    case 3:
        inWords = "three";
        break;
    default:
        inWords = "I don't know";
}
document.write(inWords);

Ak zadáme napríklad číslo 3, bude výstupom v prehliadači:

Switch in JavaScript
localhost

Ak nezadáme žiadne z troch uvedených čísel, v prehliadači sa vypíše:

Switch in JavaScript
localhost

Syntax vychádza z jazyka C a príkazy jednotlivých vetiev sa nepíšu do zložených zátvoriek. Oddeľujú sa príkazom break, ktorý spôsobí vyskočenie z celej konštrukcie switch. To môže byť pre začiatočníkov neprirodzené a dá sa na to ľahko zabudnúť. Pokiaľ sa nevykoná ani jeden prípad, spustí sa vetva default, čo je obdobou posledného else.

Je len na vás, či budete konštrukciu switch používať, všeobecne sa oplatí len pri väčšom množstve príkazov a vždy ide nahradiť sekvenciou if a else.

Jednoduchá kalkulačka

Poďme si ešte vytvoriť jednoduchú kalkulačku. Číselné vstupy nastavíme priamo v kóde a používateľa necháme vybrať iba početnú operáciu. Bez konštrukcie switch by kód kalkulačky vyzeral takto:

let a = 9;
let b = 3;

document.write("Welcome to the calculator <br />");

let choice = parseInt(prompt("Choose an operation:\n1 - addition\n2 - subtraction\n3 - multiplication\n4 - division"));
let example = "";

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

if (choice > 0 && choice < 5) {
    document.write("Result: " + example + "<br />");
} else {
    document.write("Invalid input <br />");
}

document.write("<br /> Thank you for using the calculator.");

A teraz v kalkulačke použime konštrukciu switch:

let a = 9;
let b = 3;

document.write("Welcome to the calculator <br />");

let choice = parseInt(prompt("Choose an operation:\n1 - addition\n2 - subtraction\n3 - multiplication\n4 - division"));
let example = "";

switch (choice) {
    case 1:
        example = `${a} + ${b} = ${a + b}`;
        break;
    case 2:
        example = `${a} - ${b} = ${a - b}`;
        break;
    case 3:
        example = `${a} * ${b} = ${a * b}`;
        break;
    case 4:
        example = `${a} / ${b} = ${a / b}`;
        break;
    default:
        example = "Invalid input";
}

document.write("Result: " + example + "<br />");

document.write("<br />Thank you for using the calculator.");

Vidíme, že kód je trošku prehľadnejší. Nemusíme ďalšou podmienkou overovať, či používateľ zvolil jednu zo štyroch možností. O neplatnej voľbe ho informujeme priamo vo vetve default.

Výstup kalkulačky potom vyzerá napríklad takto:

Calculator in JavaScript
localhost

V nasledujúcom cvičení, Riešené úlohy k 5.-6. lekciu JavaScriptu, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 4x (5.08 kB)
Aplikácia je vrátane zdrojových kódov v jazyku JavaScript

 

Predchádzajúci článok
Podmienky v JavaScripte
Všetky články v sekcii
Základné konštrukcie jazyka JavaScript
Preskočiť článok
(neodporúčame)
Riešené úlohy k 5.-6. lekciu JavaScriptu
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
18 hlasov
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 sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity