Funkcija (programiranje) – razlika između verzija

Uklonjeni sadržaj Dodani sadržaj
Kolega2357 (razgovor | doprinos)
m uklonjena kategorija Програмирање; dodana kategorija Programiranje pomoću gadgeta HotCat
Kolega2357 (razgovor | doprinos)
m robot kozmetičke promjene
Red 1:
'''Funkcija''' je izdvojena programska cjelina (potprogram) čiji je zadatak da na osnovu određenog [[algoritam|algoritma]] transformiše određene podatke (''parametre'', ''argumente'') u novi podatak koji se naziva ''rezultat funkcije''. Parametri, odnosno argumenti se još nazivaju i ulazni podaci, a sam rezultat funkcije njenim izlaznim podatkom. Sami podaci mogu biti različite prirode, kao što je [[broj]], [[tekst]], [[slika]], [[zvuk]] itd.
'''Функција''' је издвојена програмска цјелина (потпрограм) чији је задатак да на основу одређеног [[алгоритам|алгоритма]] трансформише одређене податке (''параметре'', ''аргументе'') у нови податак који се назива ''резултат функције''. Параметри, односно аргументи се још називају и улазни подаци, а сам резултат функције њеним излазним податком. Сами подаци могу бити различите природе, као што је [[број]], [[текст]], [[слика]], [[звук]] итд.
 
== КорисностKorisnost ==
Korisnost funkcija u programiranju je višestruka. Najprije, funkcije se koriste da razdvoje programski kod u različite cjeline da bi se lakše manipulisalo logikom programa. Takođe, na ovaj način se postiže izolacija problema - ako funkcija svoj zadatak provjereno radi dobro, problem koji postoji u programu se neće tražiti na ovom dijelu. Zbog toga funkcija treba da radi uvijek samo jedan određen zadatak, jasno definisan i sa minimalno (ili nimalo) vanjskih efekata. Od ostalih korisnih efekata funkcija tj. "razbijanja" programa u funkcije izdvajamo i sljedeće:
Корисност функција у програмирању је вишеструка. Најприје, функције се користе да раздвоје програмски код у различите цјелине да би се лакше манипулисало логиком програма. Такође, на овај начин се постиже изолација проблема - ако функција свој задатак провјерено ради добро, проблем који постоји у програму се неће тражити на овом дијелу. Због тога функција треба да ради увијек само један одређен задатак, јасно дефинисан и са минимално (или нимало) вањских ефеката. Од осталих корисних ефеката функција тј. "разбијања" програма у функције издвајамо и сљедеће:
* ponovno korištenje istog programskog koda u drugim programima
* поновно кориштење истог програмског кода у другим програмима
* izbjegavanje dupliranja istog koda u programu
* избјегавање дуплирања истог кода у програму
* povećana čitljivost kompletnog [[kod]]a
* повећана читљивост комплетног [[код]]а
 
== Sastav funkcije ==
== Састав функције ==
Funkcija se sastoji, u velikoj većini programskih jezika, od nekoliko osnovnih dijelova:
Функција се састоји, у великој већини програмских језика, од неколико основних дијелова:
* ime funkcije
* име функције
* definicija ulaznih podataka (argumenata)
* дефиниција улазних података (аргумената)
* definicija izlaznog podatka (rezultata)
* дефиниција излазног податка (резултата)
* tijelo funkcije
* тијело функције
 
U različitim [[programski jezik|programskim jezicima]] ovaj sastav se razlikuje manje ili više, u skladu sa prirodom datog programskog jezika. Npr. [[PHP]]-a u svojoj formalnoj definiciji funkcije nema definiciju izlaznog podatka, iako ta ista funkcija može da ima rezultat.
У различитим [[програмски језик|програмским језицима]] овај састав се разликује мање или више, у складу са природом датог програмског језика. Нпр. [[ПХП]]-а у својој формалној дефиницији функције нема дефиницију излазног податка, иако та иста функција може да има резултат.
 
== ПодјелаPodjela ==
U programiranju, najčešća podjela na koju nailazimo je između ''funkcija'' i ''procedura''. Pod procedurom se podrazumijeva specijalni vid funkcije koja se od funkcija razlikuje samo za to što nema izlaznu vrijednost ili, koristeći programerski žargon, ''ne vraća'' nikakvu vrijednost odnosno podatak. U različitim programskim jezicima pojavljuju se još i nazivi poput ''metoda'' (kojim se nazivaju funkcije koje pripadaju nekom [[objektno orijentisano programiranje|objektu]], tj. [[klasa|klasi]]), potprogram, rutina (sinonim za proceduru), itd.
У програмирању, најчешћа подјела на коју наилазимо је између ''функција'' и ''процедура''. Под процедуром се подразумијева специјални вид функције која се од функција разликује само за то што нема излазну вриједност или, користећи програмерски жаргон, ''не враћа'' никакву вриједност односно податак. У различитим програмским језицима појављују се још и називи попут ''метода'' (којим се називају функције које припадају неком [[објектно оријентисано програмирање|објекту]], тј. [[класа|класи]]), потпрограм, рутина (синоним за процедуру), итд.
 
== Primjeri u programskom jeziku C ==
== Примјери у програмском језику C ==
<source lang="c">
void f()
{}
</source>
Ovde je predstavljena funkcija koja ne vraća rezultat, ne uzima nijedan ulazni podatak i tijelo funkcije joj je prazno. U [[Programski jezik C|C]]-u se koristi ključna riječ void prije imena funkcije da bi se naznačilo da funkcija nema izlazni podatak. Prostor između otvorene vitičaste i zatvorene vitičaste zagrade se koristi da bi se definisao algoritam po kojem funkcija radi, a otvorena i zatvorena zagrada sa desne strane naziva funkcije služi za definisanje ulaznih parametara, kao što ćemo vidjeti u narednom primjeru.
Овде је представљена функција која не враћа резултат, не узима ниједан улазни податак и тијело функције јој је празно. У [[Програмски језик C|C]]-у се користи кључна ријеч void прије имена функције да би се назначило да функција нема излазни податак. Простор између отворене витичасте и затворене витичасте заграде се користи да би се дефинисао алгоритам по којем функција ради, а отворена и затворена заграда са десне стране назива функције служи за дефинисање улазних параметара, као што ћемо видјети у наредном примјеру.
 
<source lang="c">
int saberi(int a, int b )
{
int c;
c = a + b;
return c;
}
</source>
Funkcija saberi prihvata dva cijela broja (a i b) i vraća kao rezultat zbir ova dva. Ovaj put u definiciji funkcije vidimo da ona vraća cio broj, baš kao što su joj i argumenti cijeli brojevi, a između vitičastih zagrada vidimo programski kod koji implementira sabiranje. Još jedan aspekat je vidljiv iz ovog komada koda, a to je postojanje lokalnih promjenjivih - funkcija može predstavljati nove podatke unutar tijela funkcije i njihovo trajanje je određeno trajanjem rada funkcije. Na kraju vidimo ključnu riječ return koja služi da prekine funkciju i, u ovom slučaju, definiše rezultat funkcije.
Функција saberi прихвата два цијела броја (a и b) и враћа као резултат збир ова два. Овај пут у дефиницији функције видимо да она враћа цио број, баш као што су јој и аргументи цијели бројеви, а између витичастих заграда видимо програмски код који имплементира сабирање. Још један аспекат је видљив из овог комада кода, а то је постојање локалних промјењивих - функција може представљати нове податке унутар тијела функције и њихово трајање је одређено трајањем рада функције. На крају видимо кључну ријеч return која служи да прекине функцију и, у овом случају, дефинише резултат функције.
 
<source lang="c">
void saberi(int a, int b, int * c )
{
*c = a + b;
}
</source>
Druga verzija funkcije saberi koristi [[pokazivač (programiranje)|pokazivače]] kao sredstvo postizanja vanjskih efekata, i koja u našem primjeru zamjenjuje formalni rezultat funkcije, tj. korištenje ključne riječi return. Podatak koji je poslat funkciji kao pokazivač, ili striktnije govoreći, čija je adresa poslata funkciji kao ulazni parametar, je dostupan funkciji na mijenjanje i to je još jedan način za dobijanje povratnih informacija od funkcije. Taj način se najčešće koristi kada nam umjesto jednog rezultata treba više njih, a dotični programski jezik to ne podržava.
Друга верзија функције saberi користи [[показивач (програмирање)|показивач]]е као средство постизања вањских ефеката, и која у нашем примјеру замјењује формални резултат функције, тј. кориштење кључне ријечи return. Податак који је послат функцији као показивач, или стриктније говорећи, чија је адреса послата функцији као улазни параметар, је доступан функцији на мијењање и то је још један начин за добијање повратних информација од функције. Тај начин се најчешће користи када нам умјесто једног резултата треба више њих, а дотични програмски језик то не подржава.
 
== РекурзијаRekurzija ==
''Poseban članak: [[rekurzija]]''
''Посебан чланак: [[рекурзија]]''
 
Rekurzija je pojam koji označava situaciju kada jedna funkcija u svom tijelu vrši poziv iste te funkcije. Većina programskih jezika podržava rekurziju i ona se koristi najčešće u situacijama kada se implementira određeni algoritam koji je i u matematici definisan rekurzivno. Tipičan primjer je funkcija za izračunavanja faktorijela prirodnog broja i koja se u matematici definiše na sljedeći način:
Рекурзија је појам који означава ситуацију када једна функција у свом тијелу врши позив исте те функције. Већина програмских језика подржава рекурзију и она се користи најчешће у ситуацијама када се имплементира одређени алгоритам који је и у математици дефинисан рекурзивно. Типичан примјер је функција за израчунавања факторијела природног броја и која се у математици дефинише на сљедећи начин:
 
<math>
n! = \left \{ \begin{matrix} 1, & n=0 \\ n \times (n-1)!, & n>0 \end{matrix} \right.
</math>
 
Odgovarajuća funkcija u potpunosti odgovara zadatoj definiciji:
Одговарајућа функција у потпуности одговара задатој дефиницији:
<source lang="c">
int faktorijel(int n )
{
if (n == 0 )
return 1;
else
return n*faktorijel(n-1);
}
</source>
 
[[Kategorija:Programiranje]]
[[Kategorija:informatikaInformatika]]