4. Funkcie

Okrem procedúr ponúkajú programovacie jazyky i podprogramy, ktoré ako výsledok svojej činnosti vracajú hodnotu. Označujeme ich ako funkcie. Funkcie ako také poznáme už z matematiky (abs, sin, cos a pod.), mnohé máme k dispozícii i v programovacích jazykoch (Length, Copy, IntToStr a pod.) a dokážeme vytvoriť i vlastné. Funkcia má vo všeobecnosti podobu

 function NazovFunkcie:typ;

 pričom typ predstavuje niektorých z jednoduchých, prípadne i štruktúrovaných typov (pole).
Výsledok funkcie získame v rámci tela programu prostredníctvom priraďovacieho príkazu, napr.


mojText:=IntToStr(cislo);
max:= VratMaximum;

 
Funkcia vracia takú hodnotu, aká je v rámci jej tela priradená názvu funkcie. Vysvetlenie najlepšie nasledujúci poskytne príklad.

 Upravte úlohu na hľadanie maxima v poli tak, aby maximálny prvok poľa vrátila funkcia.

var   pole:array[1..20] of integer;
      max:integer;

function NajdiMaximum:integer;  {funkcia vrati hodnotu typu integer}
var i,mm:integer;

begin
 mm:=pole[1];       
 for i:=2 to 20 do if pole[i]>mm then mm:=pole[i];
 NajdiMaximum:=mm;   {priradenie „vynesie“ ziskanu hodnota z funkcie}
end;
 
{*************** hlavny program *******************}
begin
 NacitajHodnotyDoPola;      
 max:=NajdiMaximum;   {do premennej max sa priradi hodnota ziskana}
                     
{vo funkcii}
  ShowMessage(max);
end;

Úlohu sme modifikovali, v tele funkcie sme do jej názvu priradili hodnotu, ktorú požadujeme vrátiť ako výsledok. Tento bude priradením do premennej max použitý v ďalšom behu programu.

V tele funkcie sme namiesto premennej max (z riešenia prostredníctvom procedúry) použili premennú mm. Iný názov sme zvolili len s didaktických dôvodov – aby sa čitateľovi neplietli názvy. Ak by sme v tele funkcie NajdiMaximum deklarovali premennú s rovnakým názvom ako je premenná globálna (max), došlo by k prekrytiu – v tele funkcie by sa zmeny realizovali len na lokálnej premennej, globálna by zostávala nepovšimnutá.

Globálnu premennú max by sme dokonca mohli v našom riešení i vynechať a telo programu upraviť na:

NacitajHodnotyDoPola;
       ShowMessage(NajdiMaximum);

Funkcia NajdiMaximum vráti hodnotu, ktorá sa použije ako argument pre príkaz ShowMessage.