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

С Википедије, слободне енциклопедије
Садржај обрисан Садржај додат
м Bot: Migrating 35 interwiki links, now provided by Wikidata on d:q190686 (translate me)
Нема описа измене
Ред 1: Ред 1:
'''Функција''' је издвојена програмска цјелина (потпрограм) чији је задатак да на основу одређеног [[алгоритам|алгоритма]] трансформише одређене податке (''параметре'', ''аргументе'') у нови податак који се назива ''резултат функције''. Параметри, односно аргументи се још називају и улазни подаци, а сам резултат функције њеним излазним податком. Сами подаци могу бити различите природе, као што је [[број]], [[текст]], [[слика]], [[звук]] итд.
'''Функција''' је издвојена програмска целина (потпрограм) чији је задатак да на основу одређеног [[алгоритам|алгоритма]] трансформише одређене податке (''параметре'', ''аргументе'') у нови податак који се назива ''резултат функције''. Параметри, односно аргументи се још називају и улазни подаци, а сам резултат функције њеним излазним податком. Сами подаци могу бити различите природе, као што је [[број]], [[текст]], [[слика]], [[звук]] итд.


== Корисност ==
== Корисност ==
Корисност функција у програмирању је вишеструка. Најприје, функције се користе да раздвоје програмски код у различите цјелине да би се лакше манипулисало логиком програма. Такође, на овај начин се постиже изолација проблема - ако функција свој задатак провјерено ради добро, проблем који постоји у програму се неће тражити на овом дијелу. Због тога функција треба да ради увијек само један одређен задатак, јасно дефинисан и са минимално (или нимало) вањских ефеката. Од осталих корисних ефеката функција тј. „разбијања“ програма у функције издвајамо и сљедеће:
Корисност функција у програмирању је вишеструка. Најпре, функције се користе да раздвоје програмски код у различите цјелине да би се лакше манипулисало логиком програма. Такође, на овај начин се постиже изолација проблема - ако функција свој задатак провјерено ради добро, проблем који постоји у програму се неће тражити на овом дијелу. Због тога функција треба да ради увек само један одређен задатак, јасно дефинисан и са минимално (или нимало) спољашњих ефеката. Од осталих корисних ефеката функција тј. „разбијања“ програма у функције издвајамо и следеће:
* поновно кориштење истог програмског кода у другим програмима
* поновно кориштење истог програмског кода у другим програмима
* избјегавање дуплирања истог кода у програму
* избегавање дуплирања истог кода у програму
* повећана читљивост комплетног [[код]]а
* повећана читљивост комплетног [[код]]а


Ред 12: Ред 12:
* дефиниција улазних података (аргумената)
* дефиниција улазних података (аргумената)
* дефиниција излазног податка (резултата)
* дефиниција излазног податка (резултата)
* тијело функције
* тело функције


У различитим [[програмски језик|програмским језицима]] овај састав се разликује мање или више, у складу са природом датог програмског језика. Нпр. [[ПХП]]-а у својој формалној дефиницији функције нема дефиницију излазног податка, иако та иста функција може да има резултат.
У различитим [[програмски језик|програмским језицима]] овај састав се разликује мање или више, у складу са природом датог програмског језика. Нпр. [[ПХП]]-а у својој формалној дефиницији функције нема дефиницију излазног податка, иако та иста функција може да има резултат.


== Подјела ==
== Подела ==
У програмирању, најчешћа подјела на коју наилазимо је између ''функција'' и ''процедура''. Под процедуром се подразумијева специјални вид функције која се од функција разликује само за то што нема излазну вриједност или, користећи програмерски жаргон, ''не враћа'' никакву вриједност односно податак. У различитим програмским језицима појављују се још и називи попут ''метода'' (којим се називају функције које припадају неком [[објектно оријентисано програмирање|објекту]], тј. [[класа|класи]]), потпрограм, рутина (синоним за процедуру), итд.
У програмирању, најчешћа подела на коју наилазимо је између ''функција'' и ''процедура''. Под процедуром се подразумева специјални вид функције која се од функција разликује само за то што нема излазну вредност или, користећи програмерски жаргон, ''не враћа'' никакву вредност, односно податак. У различитим програмским језицима појављују се још и називи попут ''метода'' (којим се називају функције које припадају неком [[објектно оријентисано програмирање|објекту]], тј. [[класа|класи]]), потпрограм, рутина (синоним за процедуру), итд.


== Примјери у програмском језику C ==
== Примери у програмском језику C ==
<source lang="c">
<source lang="c">
void f()
void f()
{}
{}
</source>
</source>
Овде је представљена функција која не враћа резултат, не узима ниједан улазни податак и тијело функције јој је празно. У [[Програмски језик C|C]]-у се користи кључна ријеч void прије имена функције да би се назначило да функција нема излазни податак. Простор између отворене витичасте и затворене витичасте заграде се користи да би се дефинисао алгоритам по којем функција ради, а отворена и затворена заграда са десне стране назива функције служи за дефинисање улазних параметара, као што ћемо видјети у наредном примјеру.
Овде је представљена функција која не враћа резултат, не узима ниједан улазни податак и тијело функције јој је празно. У [[Програмски језик C|C]]-у се користи кључна реч void пре имена функције да би се назначило да функција нема излазни податак. Простор између отворене витичасте и затворене витичасте заграде се користи да би се дефинисао алгоритам по којем функција ради, а отворена и затворена заграда са десне стране назива функције служи за дефинисање улазних параметара, као што ћемо видети у наредном примеру.


<source lang="c">
<source lang="c">
Ред 34: Ред 34:
}
}
</source>
</source>
Функција saberi прихвата два цијела броја (a и b) и враћа као резултат збир ова два. Овај пут у дефиницији функције видимо да она враћа цио број, баш као што су јој и аргументи цијели бројеви, а између витичастих заграда видимо програмски код који имплементира сабирање. Још један аспекат је видљив из овог комада кода, а то је постојање локалних промјењивих - функција може представљати нове податке унутар тијела функције и њихово трајање је одређено трајањем рада функције. На крају видимо кључну ријеч return која служи да прекине функцију и, у овом случају, дефинише резултат функције.
Функција saberi прихвата два цела броја (a и b) и враћа као резултат збир ова два. Овај пут у дефиницији функције видимо да она враћа цео број, баш као што су јој и аргументи цели бројеви, а између витичастих заграда видимо програмски код који имплементира сабирање. Још један аспекат је видљив из овог комада кода, а то је постојање локалних промењивих - функција може представљати нове податке унутар тела функције и њихово трајање је одређено трајањем рада функције. На крају видимо кључну ријеч return која служи да прекине функцију и, у овом случају, дефинише резултат функције.


<source lang="c">
<source lang="c">
Ред 42: Ред 42:
}
}
</source>
</source>
Друга верзија функције saberi користи [[показивач (програмирање)|показивач]]е као средство постизања вањских ефеката, и која у нашем примјеру замјењује формални резултат функције, тј. кориштење кључне ријечи return. Податак који је послат функцији као показивач, или стриктније говорећи, чија је адреса послата функцији као улазни параметар, је доступан функцији на мијењање и то је још један начин за добијање повратних информација од функције. Тај начин се најчешће користи када нам умјесто једног резултата треба више њих, а дотични програмски језик то не подржава.
Друга верзија функције saberi користи [[показивач (програмирање)|показивач]]е као средство постизања спољашњих ефеката, и која у нашем примеру замењује формални резултат функције, тј. кориштење кључне речи return. Податак који је послат функцији као показивач, или стриктније говорећи, чија је адреса послата функцији као улазни параметар, је доступан функцији на мењање и то је још један начин за добијање повратних информација од функције. Тај начин се најчешће користи када нам уместо једног резултата треба више њих, а дотични програмски језик то не подржава.


== Рекурзија ==
== Рекурзија ==
''Посебан чланак: [[рекурзија]]''
''Посебан чланак: [[рекурзија]]''


Рекурзија је појам који означава ситуацију када једна функција у свом тијелу врши позив исте те функције. Већина програмских језика подржава рекурзију и она се користи најчешће у ситуацијама када се имплементира одређени алгоритам који је и у математици дефинисан рекурзивно. Типичан примјер је функција за израчунавања факторијела природног броја и која се у математици дефинише на сљедећи начин:
Рекурзија је појам који означава ситуацију када једна функција у свом телу врши позив исте те функције. Већина програмских језика подржава рекурзију и она се користи најчешће у ситуацијама када се имплементира одређени алгоритам који је и у математици дефинисан рекурзивно. Типичан пример је функција за израчунавања факторијела природног броја и која се у математици дефинише на следећи начин:


<math>
<math>

Верзија на датум 22. новембар 2013. у 05:48

Функција је издвојена програмска целина (потпрограм) чији је задатак да на основу одређеног алгоритма трансформише одређене податке (параметре, аргументе) у нови податак који се назива резултат функције. Параметри, односно аргументи се још називају и улазни подаци, а сам резултат функције њеним излазним податком. Сами подаци могу бити различите природе, као што је број, текст, слика, звук итд.

Корисност

Корисност функција у програмирању је вишеструка. Најпре, функције се користе да раздвоје програмски код у различите цјелине да би се лакше манипулисало логиком програма. Такође, на овај начин се постиже изолација проблема - ако функција свој задатак провјерено ради добро, проблем који постоји у програму се неће тражити на овом дијелу. Због тога функција треба да ради увек само један одређен задатак, јасно дефинисан и са минимално (или нимало) спољашњих ефеката. Од осталих корисних ефеката функција тј. „разбијања“ програма у функције издвајамо и следеће:

  • поновно кориштење истог програмског кода у другим програмима
  • избегавање дуплирања истог кода у програму
  • повећана читљивост комплетног кода

Састав функције

Функција се састоји, у великој већини програмских језика, од неколико основних дијелова:

  • име функције
  • дефиниција улазних података (аргумената)
  • дефиниција излазног податка (резултата)
  • тело функције

У различитим програмским језицима овај састав се разликује мање или више, у складу са природом датог програмског језика. Нпр. ПХП-а у својој формалној дефиницији функције нема дефиницију излазног податка, иако та иста функција може да има резултат.

Подела

У програмирању, најчешћа подела на коју наилазимо је између функција и процедура. Под процедуром се подразумева специјални вид функције која се од функција разликује само за то што нема излазну вредност или, користећи програмерски жаргон, не враћа никакву вредност, односно податак. У различитим програмским језицима појављују се још и називи попут метода (којим се називају функције које припадају неком објекту, тј. класи), потпрограм, рутина (синоним за процедуру), итд.

Примери у програмском језику C

void f()
{}

Овде је представљена функција која не враћа резултат, не узима ниједан улазни податак и тијело функције јој је празно. У C-у се користи кључна реч void пре имена функције да би се назначило да функција нема излазни податак. Простор између отворене витичасте и затворене витичасте заграде се користи да би се дефинисао алгоритам по којем функција ради, а отворена и затворена заграда са десне стране назива функције служи за дефинисање улазних параметара, као што ћемо видети у наредном примеру.

int saberi(int a, int b )
{
    int c;
    c = a + b;
    return c;
}

Функција saberi прихвата два цела броја (a и b) и враћа као резултат збир ова два. Овај пут у дефиницији функције видимо да она враћа цео број, баш као што су јој и аргументи цели бројеви, а између витичастих заграда видимо програмски код који имплементира сабирање. Још један аспекат је видљив из овог комада кода, а то је постојање локалних промењивих - функција може представљати нове податке унутар тела функције и њихово трајање је одређено трајањем рада функције. На крају видимо кључну ријеч return која служи да прекине функцију и, у овом случају, дефинише резултат функције.

void saberi(int a, int b, int * c )
{
    *c = a + b;
}

Друга верзија функције saberi користи показиваче као средство постизања спољашњих ефеката, и која у нашем примеру замењује формални резултат функције, тј. кориштење кључне речи return. Податак који је послат функцији као показивач, или стриктније говорећи, чија је адреса послата функцији као улазни параметар, је доступан функцији на мењање и то је још један начин за добијање повратних информација од функције. Тај начин се најчешће користи када нам уместо једног резултата треба више њих, а дотични програмски језик то не подржава.

Рекурзија

Посебан чланак: рекурзија

Рекурзија је појам који означава ситуацију када једна функција у свом телу врши позив исте те функције. Већина програмских језика подржава рекурзију и она се користи најчешће у ситуацијама када се имплементира одређени алгоритам који је и у математици дефинисан рекурзивно. Типичан пример је функција за израчунавања факторијела природног броја и која се у математици дефинише на следећи начин:

Одговарајућа функција у потпуности одговара задатој дефиницији:

int faktorijel(int n )
{
     if (n == 0 )
         return 1;
     else
         return n*faktorijel(n-1);
}