HALLOWEEN JE TADY: Získej 66 % extra kreditů zdarma při nákupu od 1199 kreditů s promo kódem NEBOJSEIT66. Zjisti více:
NOVINKA: Začni v IT jako webmaster s komplexním akreditovaným online kurzem Tvůrce WWW stránek. Zjisti více:
Funkce, kterou se snažíš použít je dostupná pouze pro registrované uživatele. Buďto se přihlas nebo si zdarma vytvoř nový účet.

Lekce 9 - Cyklus while v JavaScriptu

V minulé lekci, Cyklus for v JavaScriptu, jsme se naučili pracovat s for cyklem.

V dnešním tutoriálu základů JavaScriptu se naučíme používat cyklus while a použijeme jej při tvorbě jednoduché kalkulačky.

Cyklus while

Cyklus while funguje trochu jinak než cyklus for. Jednoduše opakuje příkazy v bloku, dokud platí podmínka. Syntaxe cyklu je následující:

while (podminka) {
    // příkazy
}

Pokud vás napadá, že lze přes cyklus while udělat i cyklus for, máte pravdu :) Cyklus for je vlastně speciální případ cyklu while. Cyklus while se ale používá na trochu jiné věci. Často máme v jeho podmínce například metodu vracející logickou hodnotu true/false.

Číselná řada

Pojďme si nyní ukázat použití cyklu while na praktických příkladech. Začneme tím, že vypíšeme řadu čísel od 1 do 10. Pomocí cyklu while bychom udělali číselnou řadu následovně:

let seznam = "<ul>";

let i = 1;
while (i <= 10) {
    seznam += "<li>" + i + "</li>";
    i++;
}

seznam += "</ul>";
document.body.innerHTML += seznam;

V prohlížeči se zobrazí tento výpis:

While cyklus v JavaScriptu
localhost

To ale není ideální použití cyklu while, protože zápis přes cyklus for by byl v tomto případě kratší a intuitivnější.

Kalkulačka

Jako další si vezmeme naši kalkulačku z minulých lekcí a opět ji trochu vylepšíme, konkrétně o možnost zadat více příkladů. Program tedy hned neskončí, ale zeptá se uživatele, zda si přeje spočítat další příklad.

Kalkulačka bez opakovaní

Připomeňme si původní verzi kódu, kde pro výběr početní operace využíváme konstrukci switch (můžete klidně použít i verzi s else if):

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

let vysledek = "";

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

document.body.innerHTML += `Výsledek: ${vysledek}`;

Číselné vstupy i operaci máme zadané od uživatele. Výběr čísla operace zpracováváme v konstrukci switch a v jednotlivých větvích ukládáme spočítaný výsledek do proměnné vysledek. Máme zde i větev default pro případ, že uživatel zadá jinou hodnotu než 1 - 4. V takovém případě uložíme jako výsledek text "Neplatná volba".

Kalkulačka s cyklem while

Nyní vložíme téměř celý kód do cyklu while. Po prvním výpočtu se uživatele zeptáme, zda chce spočítat další příklad. Na začátku si tedy vytvoříme proměnnou pokracovat a vložíme do ní text "ano". Ve while cyklu pak budeme kontrolovat obsah naší proměnné pokracovat. Cyklus se tedy bude opakovaně spouštět, dokud uživatel nezadá jinou odpověď než "ano".

Volbu uživatele budeme tedy vždy na konci cyklu znovu načítat a ukládat do proměnné pokracovat. Ve stejném dialogovém okně zároveň zobrazíme výsledek právě spočítaného příkladu. Funkce prompt() se totiž v JavaScriptu spouští přednostně a jakékoli výpisy do HTML kódu stránky se projeví až po skončení cyklu. V tom okamžiku se nám na stránce zobrazí všechny spočítané příklady:

let pokracovat = "ano";
while (pokracovat == "ano") {
    let a = parseInt(prompt("Zadejte první číslo:"));
    let b = parseInt(prompt("Zadejte druhé číslo:"));
    let volba = parseInt(prompt("Zadejte číslo operace:\n1 : sčítání\n2 : odčítání\n3 : násobení\n4 : dělení"));

    let vysledek = "";

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

    document.body.innerHTML += `Výsledek: ${vysledek}<br />`;

    pokracovat = prompt(`Výsledek: ${vysledek} \nPřejete si zadat další příklad? [ano/ne]`);
}

V prohlížeči se nám budou postupně zobrazovat dialogová okna a po úplném skončení se zobrazí například tento výstup:

Kalkulačka v JavaScriptu
localhost

Další dialogy v JavaScriptu

Pro zobrazení dialogového okna můžeme kromě funkce prompt() využít funkce confirm() a alert(). Obě přijímají pouze jeden parametr obsahující text dialogového okna.

Funkce confirm()

Funkce confirm() zobrazí okno s tlačítky OK a Zrušit:

Dialogové okno funkce confirm - Základní konstrukce jazyka JavaScript

Pokud klikneme na OK, vrátí funkce true, kliknutí na tlačítko Zrušit vrací false.

Funkce alert()

Funkce alert() pak zobrazí dialogové okno, které má pouze tlačítko OK, jímž okno zavřeme:

Dialogové okno funkce alert - Základní konstrukce jazyka JavaScript

Tato funkce nevrací žádnou hodnotu.

Úprava kalkulačky

V naší kalkulačce nyní využijeme funkci confirm(), aby uživatel mohl rozhodnout, zda pokračovat, pouhým kliknutím. Kód upravíme následovně:

let pokracovat = true; // Změnili jsme "ano" na true
while (pokracovat) { // Proměnná pokracovat je nyní typu boolean, v podmínce ji již nemusíme s ničím porovnávat
    let a = parseInt(prompt("Zadejte první číslo:"));
    let b = parseInt(prompt("Zadejte druhé číslo:"));
    let volba = parseInt(prompt("Zadejte číslo operace:\n1 : sčítání\n2 : odčítání\n3 : násobení\n4 : dělení"));

    let vysledek = "";

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

    document.body.innerHTML += `Výsledek: ${vysledek}<br />`;

    pokracovat = confirm(`Výsledek: ${vysledek}\nPřejete si zadat další příklad?`); // Místo prompt() jsme použili confirm()
}

Po ukončení while cyklu získáme například takový výstup:

Kalkulačka v JavaScriptu
localhost

Naši aplikaci lze nyní jednoduše používat vícekrát a je téměř hotová. Již toho umíme docela dost, začíná to být zábava, že? 🙂

V následujícím cvičení, Řešené úlohy k 8.-9. 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 316x (1.9 kB)
Aplikace je včetně zdrojových kódů v jazyce JavaScript

 

Předchozí článek
Cyklus for v JavaScriptu
Všechny články v sekci
Základní konstrukce jazyka JavaScript
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 8.-9. lekci JavaScriptu
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
924 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