e-gradiva | HTML | CSS | JavaScript | Načrtovanje | |||||
SERŠ Maribor | Iskanje | Primeri |
Če v programu na različnih mestih potrebujemo zaporedje enakih ali podobnih stavkov, lahko te stavke zapišemo v funkcijo, na tistih mestih v programu, kjer te stavke potrebujemo, pa pokličemo to funkcijo. Novo funkcijo definiramo z rezervirano besedo function
. Običajno ima funkcija svoje ime, lahko pa je tudi brez njega (za imena funkcij veljajo enaka pravila, kot za imena spremenljivk). Imena morebitnih parametrov naštejemo v oklepaju takoj za imenom funkcije (ločimo jih z vejico). V zavitih oklepajih nato napišemo stavke, ki se morajo izvršiti, ko bomo funkcijo poklicali.
Funkcije se zelo pogosto uporabljajo v programih JavaScript. Funkcije so namenjene za izvajanje različnih nalog, ki vrnejo konkretne rezultate. V funkciji je povezanih več ukazov skupaj. Ponavadi napišemo funkcijo za del kode, ki se večkrat ponovi v programu, tako da si olajšamo programiranje in da je koda preglednejša.
Funkcije kličemo preko dogodkov ali drugih klicev znotraj dokumentov HTML. Če je le mogoče bi naj bile dobre funkcije grajene tako, da jih lahko uporabimo tudi v drugih dokumentih. Če ste že kdaj koli prej programirali, boste opazili podobnosti in povezave med funkcijami JavaScript in funkcijami, ki jih uporabljajo ostali programski jeziki. Slabost, ki nekatere programerje tudi moti in se v drugih jezikih ne pojavlja je, da JavaScript ne razlikuj med procedurami, ki izvajajo nalogo in funkcijami, ki izvajajo nalogo in vrnejo ustrezne rezultate. V JavaScript obstaja enotna obravnava teh rutin. Funkcije omogočajo pridobitev in vračanje ustreznih rezultatov v delih, kjer so vsebovane, vendar to ni zmerom potrebno. Kakorkoli že, kadar funkcija vrne nek rezultat oziroma podatek ali vrednost, kličoči stavek dela s klicem funkcije kot z vsakim drugim izrazom, vrednost vrača tam, kjer je bila funkcija klicana.
Formalna in pravilna sintaksa za funkcijo je sledeča:
function imeFunkcije ( [parameter1]...[,parameterN] ) { stavek[i] }
Imena, ki jih lahko ima funkcija, imajo enake omejitve kot imena elementov in spremenljivk,
ki jih uporabljamo v HTML dokumentih. Priporočljiva je uporaba imen, ki vsaj približno opisujejo kaj konkretna funkcija počne, saj se na takšen način izognemo zmedi, ki nastaja ob nesmiselnih poimenovanjih spremenljivk z imeni kot so: x, y ,z
itd..
Primernejša je uporaba imen z več besednami je oblika z velikami začetnicami (angl. interCap - internally capitalized
), ki se pričnejo z glagolom, saj so funkcije elementi izvajanja tudi, če ne naredijo drugega kot sprejemajo ali določajo vrednost. Pomembna stvar oziroma napotek, ki ga je potrebno upoštevati, kadar se lotevamo izdelave funkcij je ta, da se čimbolj osredotočimo na vsako funkcijo posebej in jo razvijemo zamislim podobno. Možno je ustvariti funkcije, ki so vsaj v tekstovni obliki dolge tudi po 100 vrstic. Takšne funkcije so običajno zelo slabo razumljive, težko jih je doumeti in razvozlati. Zmerom imamo možnost zelo dolge in kompleksne funkcije razbiti na manjše, ampak zato bolj specializirane funkcijske segmente.
Dogodki aktivirajo funkcijo tako, da jo prikličejo preko njenega imena. Vsak priklic funkcije, tudi takšne katera izhaja iz drugega izjavnega stavka JavaScript, deluje enako kot da bi pisali novo funkcijo, s tem da moramo za funkcijskim imenom dodati še zbirko ali skupek novih parametrov.
Prav tako lahko ustvarimo funkcije, ki sprejemajo podatke, vrednosti oziroma parametre od
kličočih stavkov. Spodnji primer nam prikazuje enostaven dokument, ki vsebuje "gumbek" čigar dogodek onclick
pokliče funkcijo kadar z miškinim kazalcem kliknemo na "gumbek". Tekstovni niz podatkov v dogodkovnem poteku klica se imenuje atribut dogodkovnega poteka.
<html> <head> <script type="text/javascript"> function sporocilo(spo) { alert("Sporočilo: " + spo) } </script> </head> <body> <form action="akcija.html"> <input type="button" value="Klikni me" onclick="sporocilo('kliknil si na gumbek!')" /> </form> </body> </html>
Parametri (tudi znani kot argumenti) ponujajo mehanizme za prenos vrednosti iz ene izjave ali stavka v drug stavek s pomočjo klicanja funkcij.
Stavek return uporabljamo v funkcijah, kadar želimo, da funkcija vrne neko vrednost. To vrednost (število, niz, predmet ...) napišemo takoj za besedo return. Ko vrednost vrnemo, se izvajanje funkcije prekine, program pa se nadaljuje tam, od koder smo funkcijo poklicali. Če od funkcije pričakujemo, da vrne neko vrednost, mora biti njen zadnji stavek vedno stavek return. Poglejmo si funkcijo, ki bo izračunala vsoto števk danega naravnega števila.
function vsotaStevk(n) { var vsota = 0 while (n > 0) { vsota += n % 10 n = (n - n % 10) / 10 } return vsota }
Stavek return lahko uporabimo tudi nekje v sredini funkcije, a v tem primeru ga uporabimo v telesu pogojnega stavka, kar pomeni: če je pogoj izpolnjen, vrni vrednost in končaj izvajanje funkcije, sicer pa nadaljuj z naslednjim stavkom. Funkcija, ki bo določila predznak danega števila je primer večratne uporabe stavka return. Funkcija vrne 1, če je število pozitivno, -1, če je število negativno, in 0, če je število enako 0.
function predznak(n) { if (n > 0) return 1 if (n < 0) return -1 return 0 }
Če imamo v funkciji več stavkov return, ni nujno, da vračajo vrednosti enakega tipa. Kot primer take funkcije si oglejmo funkcijo, ki med vsemi celimi števili od a do b poišče najmanjše število, ki je deljivo s 17 ali 23. Če takega števila ne najde, vrne vrednost false.
function poisci(a, b) { for (var i = a; i <= b; ++i) if (i % 17 == 0 || i % 23 == 0) return i return false }
V tem primeru za besedo return ne napišemo nobene vrednosti. Stavek return lahko uporabimo tudi v funkciji, ki ne vrača nobenega rezultata. Takšna uporaba stavka return je smiselna samo nekje v sredini funkcije, če želimo (od določenem pogoju) prekiniti njeno izvajanje. Poglejmo si funkcijo, ki v padajočem vrstnem redu izpiše vsa nenegativna cela števila, manjša od danega celega števila.
function izpis(n) { if (n < 0) return while (n -) document.writeln(n + '<br />') }
Brskalniki NN4+ and IE4+ podpirajo tudi funkcije znotraj funkcij. Vsaka funkcija je doloČena kot globalna funkcija in je tako dostopna tudi drugim funkcijam. Pri gnezdenih funkcijah se ena funkcija nhaja znotraj druge in je dostopna le tisti, znotraj katere se nahaja.
function zunanja() { stavki function notranja() { stavki } stavki }
Funkcija lahko kliče sama sebe. Ta proces je znan kot rekurzija. Klasični primer je izraČun fakultete (fakulteta za vrednost 4 je 4 * 3 * 2 * 1).
function fac(n) { if ((n==0) || (n==1)) return 1 else { result = n * fac(n-1) return result } }
Stvek result = n * fac(n-1)
v funkciji fac(n)
kliče isto funkcijo z argumentom, ki ima nižjo vrenost n
. Ko se priČne izvajanje funkcije, se posamezne vrednosti shtranjujejo na sklad in se ponovno kliče funkcija. Zaradi potrebnega shranjevanja vmesnih vrednosti in postopkov, lahko pride pri velikih vrednostih do prekorračitve sklada, kar lahko lahko povzroči zrušitev brskalnika.
SERŠ Maribor : Strokovna gimnazija : 2003 : Tine Horvat