Professional Documents
Culture Documents
Iako (osim u samom uvodu) do sada nismo obradili pojam funkcije, ve od samog poetka,
one su postale sastavni deo naeg rada. To je zato to su, veina naredbi koje smo
upotrebljavali, u stvari funkcije.
Nakon sledeeg opisa, lako emo prepoznati kada smo se tano u dosadanjem radu koristili
funkcijama, po njihovoj simptomatinosti, odnosno, karakteristinoj formi. Pre svega, da
prvo razjasnimo ta je uopte funkcija.
Funkcija je neka programska struktura, koja je u stanju da na osnovu odreenih, primljenih
parametara ili bez njih, uradi neki posao i na osnovu uraenog posla vrati rezultat.
Razloga za korienje funkcija u programiranju ima uistinu mnogo. Ali, osnovne pozitivne
osobenosti funkcije su:
enkapsulacija
smanjenje redundantnosti koda
brzina kodiranja
portabilnost
Oigledno je da se deo koji iscrtava zvezdice ponavlja tri puta, a u programiranju postoji
pravilo da sve to se ponavlja, ne treba da se ponavlja.
Sledivi to pravilo, dolazimo do zakljuka da je neminovno reiti problem ponavljanja
zvezdica iz prethodnog koda, a najefikasniji nain da to uradimo, jeste, upotreba funkcije.
Tako bi, verzija prethodnog koda sa upotrebom funkcije, izgledala ovako:
//kreiranje funkcije zvezdice
function zvezdice()
{
document.write("*******************************************************
************");
}
//poziv funkcije zvezdice
zvezdice();
document.write("<br>naslov<br>");
//poziv funkcije zvezdice
zvezdice();
document.write("<br>Neki tekst<br>");
U prethodnom kodu, razlikujemo dve celine. Jedna je definisanje funkcije, a druga pozivanje
funkcije.
Kada je u pitanju definicija funkcije, u JavaScriptu-u moraju biti ispotovana neka pravila.
Pre svega, funkcija mora biti zapoeta kljunom reju - function. Zatim, mora posedovati
naziv, za koji, to se tie notacije, vae ista pravila kao i za promenljive. Nakon naziva, u
malim zagradama, potrebno je naglasiti prijem parametara (kroz listu promenljivih
odvojenih zarezima) ili zagrade ostaviti prazne, ukoliko funkcija ne prima parametre. I
konano, samo telo funkcije, odnosno, kod koji funkcija izvrava i koji treba postaviti u
vitiaste zagrade, odmah nakon prijema parametara:
function mojaFunkcija(parametar1,parametar2) { document.write( ovo je
telo); }
U ovom sluaju, morali bismo, osim kopiranja zvezdica, da u svakom redu ispisujemo i
naziv grada i da briemo i dodajemo zvezdice na kraju reda, kako bi bile poravnate.
Kod bi izgledao ovako:
document.write("************************************ Beograd
**************************************");
document.write("<br>Tekst o Beogradu<br>");
document.write("************************************* Pariz
****************************************");
document.write("<br>Tekst o Parizu<br>");
document.write("************************************* London
**************************************");
document.write("<br>Tekst o Londonu<br>");
U sluaju 3 grada, koliko ih ima u primeru, postavlja se pitanje svrhe ovakve funkcije. Ali,
ve posle nekoliko novih gradova, kod bi se umnogostruio kada ne bi bilo ove funkcije.
Osim toga, ta ukoliko bismo poeleli da u jednom trenutku smanjimo broj zvezdica kojima
je oivien naziv grada?
U ovoj funkciji, za to bi trebalo promeniti samo dve vrednost, dok bi, bez funkcije, trebalo
menjati kod onoliko puta koliko ima gradova.
Tipovi funkcija
JavaScript ima dve vrste funkcija, korisniki kreirane i unutranje (ugraene) funkcije koje
su deo JavaScript jezika.
Korisniki definisane funkcije se kreiraju korienjem kljune rei function, kao u
prethodnom i sledeem primeru:
function saberi(num1,num2)
{
//Ovo je primer JavaScript funkcije koja sabira dva broja
// i vraa dobijeni zbir programu koji je poziva";
return num1 + num2;
}
Funkcija moe biti napisana bilo gde u kodu, ali je ustaljena praksa da se sve funkcije piu
na poetku koda, pre ostalih naredbi. Takoe, funkcija moe biti napisana i u posebnom
fajlu. Tada je potrebno da se ovaj fajl ukljui na svaku stranu koja e da koristi njegove
funkcije.
Funkcije mogu biti pozvane iz bilo kog dela JavaScript (HTML) koda. Nakon poziva funkcije,
funkcija preuzima prosleene parametre, ukoliko ih ima, izvrava odreene naredbe i vraa
dobijenu vrednost programu (kljunom reju return).
function saberi(num1,num2)
{
return num1 + num2;
}
document.write( "Zbir brojeva 5 i 2 je
" + saberi(5,2));
U gornjem primeru koda, funkcija se prvo definie, ali se poziva tek kasnije, u okviru
document.write naredbe. Prilikom poziva funkcije, prosleuju joj se prave vrednosti
parametara (5 i 2). Funkcija preuzima ove vrednosti, smeta ih u promenljive num1 i num2,
obavlja zadate operacije (sabira ih) i dobijenu vrednost vraa document.write naredbi.
Mogue je napraviti i funkciju koja moe, a ne mora da primi parametre, a da pri tom, ne
doe do greke. U tu svrhu, postavljaju se podrazumevane vrednosti parametara.
JavaScript nema ugraen mehanizam koji ovo reava, ali se jednostavno, upotrebom
standardne provere, ovakav mehanizam moe implementirati u funkciju.
function pod(a, b) {
var a = (a == null) ? 100 : a;
var b = (b == null) ? 200 : b;
document.write(a + " " + b);
}
pod(1,2);
promenljivoj pristupa i iz tela funkcije i izvan njega, ovu promenljivu treba deklarisati kao
globalnu, odnosno, izvan funkcije. Tada e promenljiva postojati i izvan funkcija u kojima je
definisana.
var a=100;
function pod() {
document.write(a);
a=200;
}
pod();
document.write(a);
Veba 1
Problem:
Potrebno je napraviti funkciju za izraunavanje obima pravougaonika. Funkcija treba da
prihvata dva parametra a i b.
Reenje:
function prm(a,b)
{ return 2*a + 2*b; }
Veba 2
Problem:
Dat je niz:
var ar = [ 2,4,1,6,5,8,9,7,0,1 ];
Potrebno je napraviti funkciju koja prihvata niz, prolazi kroz njega i vraa samo parne
vrednosti niza u rezultujuem nizu.
Reenje:
function getOdds(arr)
{
var rez = new Array();
for(var i=0;i<arr.length;i++)
if(arr[i]%2==0)
rez.push(arr[i]);
return rez;
}
var ar = [ 2,4,1,6,5,8,9,7,0,1 ];
alert(getOdds(ar));
Veba 3
Problem:
Potrebno je napraviti (rekurzivnu) funkciju koja poziva samu sebe onoliko puta kolika je
vrednost njenog prosleenog parametra i prikazuje putem alert funkcije preostali broj
aktivacija.
Reenje:
function rec(x)
{
if(x>0)
{
x--;
alert(x);
rec(x);
}
}
rec(10);
Najvanije iz lekcije:
1. Funkcije su konstrukcije koje logike celine koda enkapsuliraju u jednu strukturu.
2. Funkcije u JavaScriptu mogu vratiti i primati vrednosti.
3. Podrazumevani tipovi funkcija u JavaScriptu su korisniki definisane i ugraene
funkcije.