Функција (програмирање) — разлика између измена

м
Враћене измене 178.222.141.37 (разговор) на последњу измену корисника Addbot
Нема описа измене
м (Враћене измене 178.222.141.37 (разговор) на последњу измену корисника Addbot)
'''Функција''' је издвојена програмска целинацјелина (потпрограм) чији је задатак да на основу одређеног [[алгоритам|алгоритма]] трансформише одређене податке (''параметре'', ''аргументе'') у нови податак који се назива ''резултат функције''. Параметри, односно аргументи се још називају и улазни подаци, а сам резултат функције њеним излазним податком. Сами подаци могу бити различите природе, као што је [[број]], [[текст]], [[слика]], [[звук]] итд.
 
== Корисност ==
Корисност функција у програмирању је вишеструка. НајпреНајприје, функције се користе да раздвоје програмски код у различите цјелине да би се лакше манипулисало логиком програма. Такође, на овај начин се постиже изолација проблема - ако функција свој задатак провјерено ради добро, проблем који постоји у програму се неће тражити на овом дијелу. Због тога функција треба да ради увекувијек само један одређен задатак, јасно дефинисан и са минимално (или нимало) спољашњихвањских ефеката. Од осталих корисних ефеката функција тј. „разбијања“ програма у функције издвајамо и следећесљедеће:
* поновно кориштење истог програмског кода у другим програмима
* избегавањеизбјегавање дуплирања истог кода у програму
* повећана читљивост комплетног [[код]]а
 
* дефиниција улазних података (аргумената)
* дефиниција излазног податка (резултата)
* телотијело функције
 
У различитим [[програмски језик|програмским језицима]] овај састав се разликује мање или више, у складу са природом датог програмског језика. Нпр. [[ПХП]]-а у својој формалној дефиницији функције нема дефиницију излазног податка, иако та иста функција може да има резултат.
 
== ПоделаПодјела ==
У програмирању, најчешћа поделаподјела на коју наилазимо је између ''функција'' и ''процедура''. Под процедуром се подразумеваподразумијева специјални вид функције која се од функција разликује само за то што нема излазну вредноствриједност или, користећи програмерски жаргон, ''не враћа'' никакву вредност,вриједност односно податак. У различитим програмским језицима појављују се још и називи попут ''метода'' (којим се називају функције које припадају неком [[објектно оријентисано програмирање|објекту]], тј. [[класа|класи]]), потпрограм, рутина (синоним за процедуру), итд.
 
== ПримериПримјери у програмском језику C ==
<source lang="c">
void f()
{}
</source>
Овде је представљена функција која не враћа резултат, не узима ниједан улазни податак и тијело функције јој је празно. У [[Програмски језик C|C]]-у се користи кључна речријеч void преприје имена функције да би се назначило да функција нема излазни податак. Простор између отворене витичасте и затворене витичасте заграде се користи да би се дефинисао алгоритам по којем функција ради, а отворена и затворена заграда са десне стране назива функције служи за дефинисање улазних параметара, као што ћемо видетивидјети у наредном примерупримјеру.
 
<source lang="c">
}
</source>
Функција saberi прихвата два целацијела броја (a и b) и враћа као резултат збир ова два. Овај пут у дефиницији функције видимо да она враћа цеоцио број, баш као што су јој и аргументи целицијели бројеви, а између витичастих заграда видимо програмски код који имплементира сабирање. Још један аспекат је видљив из овог комада кода, а то је постојање локалних промењивихпромјењивих - функција може представљати нове податке унутар телатијела функције и њихово трајање је одређено трајањем рада функције. На крају видимо кључну ријеч return која служи да прекине функцију и, у овом случају, дефинише резултат функције.
 
<source lang="c">
}
</source>
Друга верзија функције saberi користи [[показивач (програмирање)|показивач]]е као средство постизања спољашњихвањских ефеката, и која у нашем примерупримјеру замењујезамјењује формални резултат функције, тј. кориштење кључне речиријечи return. Податак који је послат функцији као показивач, или стриктније говорећи, чија је адреса послата функцији као улазни параметар, је доступан функцији на мењањемијењање и то је још један начин за добијање повратних информација од функције. Тај начин се најчешће користи када нам уместоумјесто једног резултата треба више њих, а дотични програмски језик то не подржава.
 
== Рекурзија ==
''Посебан чланак: [[рекурзија]]''
 
Рекурзија је појам који означава ситуацију када једна функција у свом телутијелу врши позив исте те функције. Већина програмских језика подржава рекурзију и она се користи најчешће у ситуацијама када се имплементира одређени алгоритам који је и у математици дефинисан рекурзивно. Типичан примерпримјер је функција за израчунавања факторијела природног броја и која се у математици дефинише на следећисљедећи начин:
 
<math>