II.
Začíname s funkciami...
Pri tvorbe skriptov sa často dostávame do situácie, kedy potrebujeme
zopakovať určitú súslednosť už raz vykonaných príkazov. Vtedy je výhodné
si zadeklarovať funkciu, ktorá by obsahovala tieto príkazy.
Takúto funkciu môžeme potom v prípade potreby kedykoľvek vyvolať
z ľubovolnej časti programu. Využívanie funkcií šetrí veľkosť zdrojového
textu a naviac sa skript takto stáva prehľadnejším.
Príklad
2.1: Jednoduchá
funkcia - čiara
Funkcie sa zvyknú deklarovať
na začiatku stránky medzi párovým tagom <HEAD>
a </HEAD>.
|
|
<html>
<head>
<title>Jednoducha funkcia</title>
<script language="JavaScript">
<!--
function ciara()
{
document.write("===============================<br>");
}
// -->
</script>
</head>
<body>
<script language="JavaScript">
<!--
ciara();
document.write("Programujeme v JavaScripte<br>");
ciara();
// -->
</script>
</body>
</html>
|
|
Toto bol jednoduchý príklad funkcie,
ktorá po vyvolaní, nakreslila čiaru. Funkcie však môžu byť aj podstatne
zložitejšie, tzn. že môžu spracovávať aj nejaké vstupné údaje
(parametre) a na ich základe vykonávať už mierne odlišný sled príkazov.
Tým sa z nich stávajú viacúčelové stavebné prvky.
V nasledujúcom príklade si ukážeme akým spôsobom je možné vyvolať
funkciu s parametrom a ako funkcia dokáže vrátiť hodnotu
na miesto odkiaľ bola vyvolaná.
Príklad
2.2: Ukážka zložitejších
funkcií
Pri deklarácii funkcie, ktorá
má obsahovať vstupné parametre, sa miesto prázdnych
zátvoriek zapisuje zoznam parametrov oddelených od seba čiarkou.
Pri vyvolaní tejto funkcie musíme tieto parametre uviesť.
Funkcia vypis pozostáva z 3 parametrov:
farba, veľkost a text. Parametre farba
a veľkosť udávajú formát textu a parameter
text obsahuje text, ktorý sa má vypísať.
Funkcia nahodne_cislo pozostáva z parametru
rozsah, ktorý udáva v akom rozsahu má
byť vygenerované náhodné číslo.
|
|
<html>
<head>
<title>Ukazka zlozitejsich funkcii</title>
<script language="JavaScript">
<!--
function vypis(farba,velkost,text)
{
t1="<font ";
t2="color="+farba+" ";
t3="size="+velkost+">";
t4="</font>";
document.write(t1+t2+t3+text+t4);
}
function nahodne_cislo(rozsah)
{
return Math.round(Math.random()*rozsah);
}
// -->
</script>
</head>
<body>
<script language="JavaScript">
<!--
rozsah=100;
vypis("green",4,"nahodne cislo ");
vypis("black",2,"do "+rozsah+" je: ");
vypis("red",5,nahodne_cislo(rozsah));
// -->
</script>
</body>
</html>
|
V uvedenom príklade sa okrem už spomenutých
2 funkcií vyskytujú aj matematické funkcie: Math.round()
a Math.random(). Funkcia Math.round() zaokrúhľuje čísla
na 0 desatinných miest a funkcia Math.random() generuje
náhodné čísla v udanom rozsahu. Prehľad ostatných matematických funkcií
je uvedený v prílohe.
Vo funkcii nahodne_cislo sa nachádza pre nás zatiaľ
ešte neznámy príkaz return. Ten spôsobuje vrátenie
udanej hodnoty na miesto v skripte odkiaľ bola funkcia volaná. V našom
prípade dôjde k odovzdaniu vygenerovaného náhodného čísla do funkcie
vypis, ktorá ho následne spracuje (vypíše ho na obrazovku
červenou farbou).
Hádam, hádaš, hádame alebo načo robiť for-y...
Na záver si naprogramujeme jednoduchú
hru Hádanie čísel. V tejto hre má hráč za úlohu uhádnuť
číslo, na ktoré myslí počítač (od 1 do 100). Aby to mal ľahšie, počítač
mu bude radiť v štýle hádaj menej/hádaj viac. Hra sa úspešne končí ak
hráč uhádne hľadané číslo do 10. pokusov.
Príklad
2.3: Hádanie čísel
Okrem už známych konštrukcií
if..else sa v tomto skripte nachádza aj príkaz
cyklu: for. Jeho funkciou je zabezpečovať cyklické
vykonávanie príkazov, ktoré sa nachádzajú vo vnútri jeho hranatých
zátvoriek. Príkazy sú vykonávané dovtedy, kým je splnená podmienka
udaná pri jeho deklarácii.
Syntax príkazu je následovná:
for (začiatok;koniec;operácia)
{
...
}
začiatok
- počiatočná hodnota danej premennej
koniec - konečná hodnota danej premennej
zapísaná vo forme výrazu (ak výraz platí, cyklus beží)
operácia - udáva, že ako sa má daná
premenná zmeniť po každom vykonaní cyklu
V našom prípade cyklus
for pracuje následovne. Do premennej pokus
sa vloží číslo 2. Keďže je to číslo menšie ako 11, vykonajú sa
príkazy vo vnútri hranatých zátvoriek. Po ich vykonaní sa hodnota
premennej pokus zvýši o 1 (pokus++, viď príloha).
Teraz premenná pokus obsahuje číslo 3. Podmienka
je opäť splnená (pokus je menší ako 11), a preto
sa opäť vykonajú príkazy vo vnútri for. Celé
sa to opakuje dovtedy, kým hráč neuhádne dané číslo alebo mu neuplynie
desiaty pokus (cyklus for už ďalej nebude pokračovať,
pretože prestáva platiť podmienka pokus<11).
|
|
<html>
<head>
<title>Hra: Hadanie cisel</title>
<script language="JavaScript">
<!--
function hadanie_cisel()
{
oznam1="Hra: Hadanie cisel\n\n";
oznam2="Cielom hry je uhadnut cislo na 10 pokusov\n";
oznam3="Pocitac vam bude radit (menej/viac)\n\n";
oznam4="Vela stastia!";
window.alert(oznam1+oznam2+oznam3+oznam4);
vymyslene=Math.round(Math.random()*100);
hadane=window.prompt("Hadaj cislo do 100 (1.pokus)","0");
for (pokus=2; pokus<11; pokus++)
{
if (vymyslene==hadane)
{
window.alert("Vyhral si na "+(pokus-1)+".pokus");
return;
}
if (vymyslene<=hadane)
hadane=window.prompt("Hadaj menej! (pokus "+pokus+".)",hadane);
else
hadane=window.prompt("Hadaj viac! (pokus "+pokus+".)",hadane);
if (pokus==10) window.alert("Prehral si!");
}
}
// -->
</script>
</head>
<body>
<script language="JavaScript">
<!--
hadanie_cisel();
// -->
</script>
</body>
</html>
|
Záverom...
A máme tu koniec 2. časti seriálu
o programovaní v JavaScripte. Dúfam, že ste aj túto časť zvládli v pohode
a že ste sa nestretli s nejakými nejasnosťami. Ak si predsa neviete
dať s niečim rady, kľudne mi pošlite e-mail a ja sa vám pokúsim zodpovedať
na vaše otázky. Na budúce si rozoberieme problematiku prezentačných
okien...
Veľa úspechov s JavaScriptom vám želá,
Rastislav Škultéty
webmaster@javascript.sk
PRÍLOHA: Matematické funkcie
a aritmetické operátory
Funkcia (Math.nazov)
abs
sin, cos, tan
asin, acos, atan
exp
log
ceil
floor
min, max
pow
round
sqrt
|
|
Popis funkcie
absolútna hodnota
štandartné trigonometrické funkcie (argument v radiánoch)
inverzné trigonometrické funkcie (vracajú hodnotu v radiánoch)
exponenciálna funkcia (základ e)
prirodzený logaritmus (základ e)
zaokrúhľovanie smerom hore
zaokrúhľovanie smerom dole
argument obsahuje 2 čísla, funkcia vráti to číslo, ktoré je menšie/väčšie
exponenciálna funkcia (prvý argument je základ, druhý exponent)
všeobecné zaokrúhľovanie
odmocnina
|
Symbol
pokus++
pokus--
pokus+=x
pokus-=x
pokus*=x
pokus/=x
|
|
Popis
pripočíta k premennej pokus číslo 1
odpočíta z premennej pokus číslo 1
pripočíta k premennej pokus číslo x
odpočíta z premennej pokus číslo x
vynásobí pôvodný obsah premennej číslom x
vydelí pôvodný obsah premennej číslom x
|
|
To isté ako
pokus=pokus+1 (pokus+=1)
pokus=pokus-1 (pokus-=1)
pokus=pokus+x
pokus=pokus-x
pokus=pokus*x
pokus=pokus/x
|
NAHORU
grafické zpracování (C) 1999 Jakub
Holý, časopis Internet,
Trade & Leisure Publications
Praha
obsah, online zpracování (C) 1998 - 1999 Rastislav
Škultéty
|