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ů :
for, for...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 suma = new
Array(pocet); // vytvoří pole o 11
položkách
- // indexované od 0 do 10
var celk_suma =
0; suma[0] = 0;
for(var i = 1; i < pocet; i++) {
// počítá od 1 do
10 celk_suma += i; suma[i] = celk_suma; }
var nova_suma = 0; for(var j = 1; j > pocet; j++) { //
cyklus se nikdy neprovede nova_suma += j; }
var suma =
0; for(var k = 1; k >
0; k++)
{ // nekonečný
cyklus suma += 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í ! // Toto
použití continue by vytvořilo nekonečný cyklus // continue; // } if
(pocitadlo > 1)
{ stav = "Zbývá " +
pocitadlo + " s do startu!"; } else
{ stav = "Poslední sekunda před startem !";
} pocitadlo--; } stav =
"START!";
|