You are on page 1of 6

Funkcije

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

Funkcije zauzimaju kljunu ulogu i u modernom objektno orjentisanom programiranju, jer


je, praktino, kompletna funkcionalnost klasa (koje su osnove objektno orjentisanog
programiranja) smetena ba u metode tih klasa. Metode klasa su, nita drugo, do
najobinije funkcije. Funkcije su veoma upotrebljiv alat i nevezano za oop.
JavaScript i ne funkcionie ba po klasinom objektno orjentisanom modelu, ve po tzv.
prototipno baziranom objektnom modelu, ali, pravila su prilino slina i razumevanjem
jednog od ova dva modela, lako se ostvaruje i razumevanje drugog.
Vratimo se na funkcije. Veoma je est sluaj da se pojavi potreba za uestalom upotrebom
jednog istog bloka koda u jednom programu. Ukoliko funkcije ne bi postojale, ovaj kod
bismo, u najboljem sluaju, morali da kopiramo na svako mesto gde nam je potreban.
Npr. u kodu, na vie mesta ispisujemo jedan isti tekst. Recimo, zvezdice u narednom
primeru:
document.write("*******************************************************
************");
document.write("<br>naslov<br>");
document.write("*******************************************************
************");
document.write("<br>Neki tekst<br>");
document.write("*******************************************************
************");

Copyright Link group

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); }

Ovakav pristup, ne samo da omoguava da se smanji veliina koda, ve i dovodi do


centralizacije koda, odnosno, jednostavne manipulacije raznim mehanizmima, koji se u
kodu izvravaju putem funkcija.
Recimo da primer sa zvezdicama jo uvek nije prikazao pravu mo funkcija, i da je jo uvek
lake kopirati jedan isti red nekoliko puta. Ali, ta ako bismo eleli da na izlaz, sa
zvezdicama ima dinamiki sadraj?
Na primer:
*********************** Beograd *************************
Tekst o Beogradu
*********************** Pariz ****************************
Tekst o Parizu
*********************** London **************************
Tekst o Londonu

Copyright Link group

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>");

Upotrebom funkcije, ovaj kod bi se mogao reiti na sledei nain:


//kreiranje funkcije zvezdice
function zvezdice(nazivGrada)
{
//petlja koja iscrtava prvi set zvezdica
for(i=0;i<35;i++)
document.write("*");
//ispis naziva grada odvojenog praznim mestima
//naziv grada je usao kao parametar u funkciju
document.write(" " + nazivGrada + " ");
//petlja koja iscrtava drugi set zvezdica
//pocetna vrednost petlje je dosadasnji broj zvezdica (duzina prve
petlje)
//+ duzina grada + dva prazna prostora ubacena oko duzine grada
//ciljna vrednost je npr. 90
for(x=(i+2)+nazivGrada.length;x<90;x++)
document.write("*");
}
//poziv funkcije zvezdice
zvezdice("Beograd");
document.write("<br>Tekst o Beogradu<br>");
zvezdice("Pariz");
document.write("<br>Tekst o Parizu<br>");
zvezdice("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.

Copyright Link group

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);

U sluaju ovog primera, podrazumevane vrednosti e biti 100 za a i 200 za b.


Promenljive koje se koriste unutar tela funkcije nazivaju se lokalne promenljive. Njima ne
moe da se pristupa izvan funkcije. Ukoliko je, ipak, potrebno da se jednoj istoj

Copyright Link group

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);

Promenljiva a je kreirana izvan funkcije, to znai da e postojati izvan funkcija, ali i u


njima. Prilikom poziva funkcije, promenljiva a biva ispisana na stranu i promenjena joj je
vrednost na 200, koju je mogue koristiti kasnije u kodu (document.write).
Ponekad funkciju treba definisati generiki u samom kodu. Na primer, kada hoemo da
definiemo funkcionalnost za neki dogaaj. U tom sluaju, funkcija nee imati ime, ve e
se samo aktivirati kroz kod. Ovakve funkcije nazivaju se jo i anonimus funkcije.
document.onclick=function() { document.write("123"); }

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.

Copyright Link group

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.

Copyright Link group

You might also like