logosrpen.gif (3014 bytes)JScript
Namodro


Příkazy pro kontrolu běhu programu v JScriptu

 

Proč vlastně ovlivňovat běh programu?

Při programování před vámi nejednou vyvstane potřeba provést část programu jenom při určité podmínce, pro určitou množinu hodnot, pro jistou událost aj. Například budete chtít napsat skript, který bude každou hodinu testovat čas a podle toho určovat v jakou denní dobu se nacházíte. Další úlohou se stane zpracování uživatelského zadání ve formuláři, opakování nějaké akce (animace), a mnohé další, které bez testování podmínky prostě nenapíšete.

V zásadě existuje několik druhů podmínek, které lze testovat. Veškeré podmínky mohou mít právě jednu z těchto hodnot : true nebo false (pravda, nepravda). Není problém testovat hodnoty číselného nebo řetezcového typu. Přirozeně se dá testovat datový typ Boolean.

JScript obsahuje mnoho příkazů pro kontrolu běhu programu, kterými lze bez problému vyřešit cokoliv. Nejjednoduší z nich jsou podmíněné příkazy.

Podmíněné příkazy

JScript podporuje podmíněný příkaz ve tvaru if a if ... else. V příkazu if se testuje podmínka a pokud je splněna provede se kód za if. (V příkazu  if...else je vykonán kód za else pokud je výsledkem výrazu hodnota false).  Nejjednoduší podoba příkazu může být napsána na jedné řádce, nicméně daleko více se budete setkávat s víceřádkovou formou.

Následující příklady jsou demonstrací příkazu if ... else. První z nich ukazuje nejjednodušší druh testu. Pokud je položka uvnitř závorek pravdivá, provede se kód následující po if.

// Funkce Rozbij() je definována už někde dříve v programu
if (
nova_lod)
  
Rozbij(lahevSampanskeho);  // Boolean test pravdivosti proměnné
nova_lod

//
zde test selže (bude mít hodnotu false) pokud nejsou obě proměnné pravdivé
if (
zvire.usi == "velke" && zvire.nohy == 4)
{
       
odpoved = ("Není to slon :-) ?");
}


//
test bude true pokud platí aspoň jedna podmínka
var
modra_knizka;
if ((
vyska < 150) || (hmotnost > 450))
{
   
modra_knizka = true;
}
else
   
modra_knizka = false;

Podmíněný operátor

V JScriptu existuje podpora tzv. implicitní forma podmíněného příkazu. Nazývá se podmíněný operátor. K jeho zápisu používáme znak otazníku, který píšeme za výraz, jehož hodnotu testujeme (narozdíl od if, které se píše před výraz). Jak víme, výraz má vždy jednu ze dvou hodnot, true nebo false. Tyto dvě alternativy jsou v podmíněném operátoru odděleny dvojtečkou. Více o samotné syntaxi napoví příklad.

var denni_doba = "";

// následující podmíněný operátor určí denní dobu, proměnná hodina již byla
// dříve definována

denní_doba += ( hodina >= 12) ? "
odpoledne" : "dopoledne";
Opakování a cykly

Existuje hned několik způsobů jak donutit program vykonávat opakovaně určitou část kódu. Obecně se nazývá opakované vykonávání cyklus. Typicky obsahuje po každém smyčce test nějaké proměnné, která během proběhnutí změnila svojí hodnotu a tím zjišťuje konec cyklu. JScript podporuje poměrně dost typů cyklů : forfor...in, while, do...while a switch.

Cyklus for

Příkaz for obsahuje ve svém těle proměnou nazývanou counter (počítadlo), testovací podmínku a akci, která mění counter. Předtím, než je jedna smyčka vykonána se testuje podmínka. Pokud platí (hodnota true), provede se blok příkazu v cyklu. Po skončení takové smyčky, se podle specifikované akce změní hodnota counter a začíná další.

Pokud není podmínka nikdy splněna, cyklus nikdy neproběhne. Pokud naopak bude výsledkem testu v příkazu for hodnota true, bude cyklus probíhat nekonečně. Dejte proto pozor na správné zadání příkazu, nekonečná podmínka může někdy vést k nepředvídatelnému chování.

/*
změna výrazu ( "i++" v následujícím příkladu) je provedena po skončení jedné smyčky
poté, co jsou provedeny příkazy v bloku a před tím, než je testována podmínka
*/

var
pocet = 11;  // nastavuje limit pro proměnnou cyklu i

var sum
a = new Array(pocet);  // vytvoří pole o 11 položkách
// indexované od 0 do 10
var
celk_suma = 0;
sum
a[0] = 0;

for(var
i = 1; i < pocet; i++)  {         // počítá od 1 do 10
celk_suma += i;
sum
a[i] = celk_suma;
}

var
nova_suma = 0;
for(var
j = 1; j > pocet; j++)  {        // cyklus se nikdy neprovede
nova_suma += j;
}


var sum
a = 0;
for(var
k = 1; k > 0; k++)  {        // nekonečný cyklus
sum
a += k;
}

Cyklus for...in

V JScriptu je možné použít speciální případ cyklu, který probíhá pro všechny atributy objektu. Counter v for...in se dá rovněž využít k postupnému získání všech prvků pole. Jedná se o řetězec, nikoliv číslo.

for (j in pejsek)  // pejsek je objekt s několika atributy
{
//
nějaké příkazy
}

Cyklus while

Cyklus while se velmi podobá příkazu for. Rozdíl je v tom, že tento cyklus nemá vlastní vkomponovanou proměnou counter a také postrádá výraz pro změnu této proměnné. Musíme ji proto dodat dodatečně, což však nebývá na překážku (někdy právě naopak). Občas se jeví použití tohoto typu cyklu daleko užitečnější. Protože však counter definujete sami, pravděpodobnost špatné definice je narůstá a tím pádem se může snáze než u for přihodit nepříjemný nekonečný cyklus a program vám "zamrzne" na jednom místě. Dávejte si dobrý pozor na tento příkaz...

var stav = "";
var
pocitadlo = 42;         // Inicializace odpočítávání
while (
pocitadlo >= 1)  {
    if (
pocitadlo > 1)   {
       
stav = "Zbyva " + pocitadlo + " s do startu !";
}
    else  {
       
stav = "Posledni sekunda pred startem !";
    }
pocitadlo--;         // změní hodnotu našeho counteru
}
stav = "START!";

Příkazy break a continue

Tyto příkazy slouží v JScriptu pro umělé přerušení cyklu. Příkaz break ukončí natvrdo cyklus. Obvykle se používá ve spojitosti s nějakou podmínkou (příkaz if). continue naproti tomu ignoruje příkazy cyklu napsané za ním a rovnou ukončí smyčku. Poté  změní hodnotu proměnné counter a pokračuje dalsí smyčkou.

var komentar = "";
var
zbytek = 0;
var
konec = 3;
var
kontrolujme = 27;
for (
k = 1; k <= 10; k++)
{
   
zbytek = kontrolujme % k;
    if (
zbytek == konec)
      {
            break;  //
končí cyklus s první hodnotou proměnné zbytek, která se rovná konec
}
komentar = zkontrolujme + " děleno " + k + " dává zbytek  " + zbytek;
}

for (k = 1; k <= 10; k++)
{
  
zbytek = kontrolujme % k;
   if (
zbytek != konec)

   {
      continue;  //
pokračuje jenom v případech, kdy se zbytek rovná konec
}
//
kód JScriptu, který bude vykonán v těchto případech
}


var
stav = "";
var
pocitadlo = 42;  // inicializace počítadla
while (
pocitadlo >= 1)  {
// if (
pocitadlo < 10)  {   // upozornění !
// T
oto použití continue by vytvořilo nekonečný cyklus
// continue;
// }
    if (
pocitadlo > 1)   {
        s
tav = "Zbývá " + pocitadlo + " s do startu!";
}
    else  {
       
stav = "Poslední sekunda před startem !";
    }
pocitadlo--;
}
stav = "START!";

 

Obsah

Předchozí (operátory)

Další (funkce)


(c) Svět Namodro, všechna práva vyhrazena, kontaktní informace