Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 8 - 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ě:

document.write("<ul>");

let i = 1;
while (i <= 10) {
    document.write("<li>" + i);
    i++;
}
document.write("</ul>");

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

While cyklus v JavaScriptu
localhost

To ale není ideální použití cyklu while.

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:

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

let a = 9;
let b = 3;

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.");

Číselné vstupy máme zadané přímo v kódu a uživatele necháváme vybrat pouze početní operaci. Kód si můžete následně upravit a nechat si zadat číselné hodnoty také pomocí funkce prompt(). Protože by kalkulačka měla umět pracovat i s desetinnými čísly, číselné vstupy od uživatele bychom poté parsovali pomocí funkce parseFloat().

Pro odřádkování jednotlivých operací jsme použili escape sekvenci \n, kterou jsme si uváděli v lekci Textové řetězce v JavaScriptu.

Výběr čísla operace zpracováváme v konstrukci switch a v jednotlivých větvích ukládáme spočítaný příklad do proměnné priklad. 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 pomocí metody document.write() se zobrazí 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 = 9;
    let b = 3;
    let priklad = "";

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

    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";
    }

    pokracovat = prompt(priklad + "\nPřejete si zadat další příklad? [ano/ne]");
    document.write(priklad + "<br>");

}
document.write("Děkuji za použití kalkulačky.");

Úvodní výpis Vítejte v kalkulačce ještě nahradíme nadpisem Spočítané příklady:. V prohlížeči se nám nakonec zobrazí například tento výstup:

Kalkulačka v JavaScriptu
localhost

Funkce confirm() a alert()

Pro zobrazení dialogového okna můžeme kromě funkce prompt() využít funkci confirm() a alert(). Obě přijímají pouze jeden parametr obsahující text dialogového okna. Funkce confirm() pak 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() 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.

V naší kalkulačce nyní využijeme funkci confirm(), aby uživatel mohl rozhodnou, 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 = 9;
   let b = 3;
   let priklad = "";

   let volba = parseInt(prompt("Zvolte si operaci:\n1 - sčítání\n2 - odčítání\n3 - násobení\n4 - dělení"));

   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";
    }

    pokracovat = confirm(priklad + "\nPřejete si zadat další příklad?"); // Místo prompt() jsme použili confirm()
    document.write(priklad + "<br>");
}

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

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 7.-8. 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 74x (2.62 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 7.-8. lekci JavaScriptu
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
198 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