Arhiva

Funkcije

Funkcije, procedure, metodi, subrutine, potprogrami…

Svi ovi nazivi podrazumevaju potprogram ili deo koda u okviru većeg programa koji obavlja određenu operaciju – posao.

Uobičajeno je da se funkcijom nazivaju one subrutine koje na kraju vraćaju neku vrednost, dok se procedurom nazivaju
programi koji ne vraćaju nikakvu vrednost.
Metodi su vrlo slični funkcijama, samo što su pridruženi klasama ili objektima.
U daljem tekstu ja ću koristiti uglavnom termin – funkcija.

Pozivanju funkcije može da se pridruži i jedan ili više parametara, koji mogu biti: izrazi, promenjive,
druge funkcije i objekti.
?date() && današnji datum
?year(date()) && godina
?left("Majstor",3) && vraća Maj

Procedure možete pozvati i na sledeći način:
do dan with ldDatum
Metodi se pozivaju referencirajući klasu(objekat) u kome se nalaze.
thisform.mojsupermetod()

Čemu to služi, a uz to i radi!?!

Osnovna svrha korišćenja funkcija je eliminisanje dupliranja istog koda i omogućavanje
ponovnog korišćenja istog koda na različitim mestima u aplikaciji, kao i u više različitih aplikacija.
Osim toga, segmentiranje koda u manje delove koji se lakše mogu obrađivati i proširivati je takođe
neophodno radi efikasnijeg razvoja programa, što u isto vreme olakšava i samu čitljivost koda.
I na kraju, savremeno programiranje podrazumeva upotrebu sakrivanja
informacija preko korišćenja interfejsa da bi se ostatak programa
sačuvao od konkretne implementacije.
To u prevodu znači, da vam je dosta da znate kako da koristite
određenu funkciju i šta su rezultati njenog pozivanja, bez da morate da znate kako je interno rešen problem.
Na primer, možete napisati namensku funkciju koja će snimati izmene u podacima
MojSave()

bez obzira da li se podaci čuvaju u Foxovim DBF tabelama, na MS SQL bazi, txt fajlovima, XML-u ili nečem drugom,
ali je vi uvek pozivate na isti način.

Grupisanje funkcija je moguće po nekoliko kriterijuma. Na primer, imamo funkcije koje rade sa podacima i to sa određenim tipovima
podataka(manipulacija datumom, stringom itd.), zatim funkcije koje rade sa fajlovima, okruženjem, nizovima, matematičke funkcije itd.
Ja nemam nameru da ovde izlažem čak ni te grupe funkcija, a kamoli pojedinačne funkcije, to je već odlično urađeno i u samom helpu Visual FoxPro-a i u
sjajnoj Whil Hentzen-ovoj knjizi Fundamentals

Istorija i UDF(User defined functions)

Osim ugrađenih funkcija koje su vrlo korisne, glavni posao odrađivaće vam funkcije koje ćete
sami pisati. Takozvane UDF ili User Defined Functions su upravo ti programi. Nekada davno, u vreme proceduralnih
programa, programi su se pisali tako što su se pravile biblioteke funkcija ili procedura koje su radile određenu stvar.
Mnoge od tih funkcija su sada ugrađene direktno u jezik, ali potreba za pisanjem takvih biblioteka nije prestala.

Teoretski, mogli ste imati jedan jedini fajl(PRG) u kome su se nalazile i funkcije/procedure koje pozivate.
Kako se taj program znao neverovatno uvećati, snalaženje je bilo vrlo otežano, a slična funkcionalnost se tražila i u drugim programima koje pravite.
Zbog toga, neminovno je došlo do seljenja svih tih funkcija u
zasebne fajlove, koje ste mogli pozivati direktno, ako ste pre
toga postavili pokazivač na njih sa:
SET PROCEDURE TO ImePrograma

Kako to izgleda danas?

Iako se i danas u istoj meri koriste proceduralni fajlovi(biiblioteke
funkcija), organizacija je ipak drugačija. Zbog mnogih prednosti
objektno orijentisanog programiranja, umesto funkcija dominiraju
metodi ili metodi događaja(event methods) pridruženi objektima. Na sistemske ili korisničke
akcije reaguje objekat i poziva odgovarajući metod pridružen događaju(event method).
Na primer, ako korisnik klikne mišem na neko dugme na obrascu, biće pozvan CLICK method pridružen
događaju CLICK u tom dugmetu.
Vi naravno možete pisati i namenske metode, ali njih morate sami pozivati, kao što je gore navedeno.
Ono što je interesantno je da metod pridružen događaju možete
zvati i kroz kod. Recimo, gore pomenuti događaj CLICK možete sami
pozvati sa:
thisform.dugme.click()
i isti kod će biti izvršen, kao da je korisnik sam kliknuo na odgovarajuće dugme. Međutim, iako to zvuči interesantno,
a i može biti korisno ponekad, takva akcija samo ukazuje na loše napisan kod.


Ovde bi se moglo još toga dodati, ali se opet ova stranica odužila, pa ćemo to dodati kada budemo pokrivali
objekte, klase i slično.

Prethodno poglavlje - Naredbe, komande