Lekce 1.17
Deklarace a používání funkcí


předchozí lekce (1.16) obsah kurzu následující lekce (1.18)

V předchozí lekci jsme si ukázali, jak si nadefinovat vlastní příkaz ve formě podprogramu. Mnohdy by ale bylo výhodné, pokud by jsme mohli volat podprogram jako součást výrazu tak, aby nám vrátil podprogram výsledek, se kterým byste ve výrazu dále pracovali. Něco takového je sice možné, používají se k tomu ale funkce.

Funkce je definovaná část programu, která je volaná z výrazu a provádí určité výpočty, případně akce. Při ukončení funkce nám vrací požadovaný výsledek, se kterým se ve výrazu, odkud byla funkce volána dále pracuje. Uveďme si proto příklad deklarace a použití funkce v programu, který nám provádí výpočet mocniny zadaným exponentem (53 = 5 x 5 x 5, výsledek je 125).


Function Umocni(x, y)
   v = x           'převezmeme základ
   For k = 1 to y
       v = v*x     'násobíme opakovaně základem
   Next
   Umocni = v      'předáme výsledku funkce
End Function

Sub Main()
    ConsoleClear
    ConsoleShow
    Writeln(Umocni(2,9))  'vypíše hodnotu 1024
    Writeln(Umocni(3,3))  'vypíše hodnotu   81
    Writeln(Umocni(5,2))  'vypíše hodnotu  125
End Sub
Funkce se od podprogramu liší svým zahájením a ukončením, kdy je výpočet funkce uveden klíčovým slovem Function. Počet deklarovaných proměnných v podprogramu i funkci musí vždy odpovídat počtu předávaných parametrů ve volání podprogramu, případně funkci. Parametry jsou od sebe odděleny čárkou. Funkce musí být vždy ukončena příkazem End Function.

Ve funkci je automaticky deklarována proměnná se jménem funkce. Ta slouží pro předání výsledné hodnoty nadřazenému programu. Ukládáme do ní tedy v programu hodnotu, kterou chceme předat volanému programu. Například:


Jmeno = výraz
Při programování funkcí si musíte dát pozor na to, abyste v rámci funkce nepožadovali provedení stejné funkce. Takovým funkcím se říká rekurzivní volání. Využívají se například při výpočtu faktoriálu nebo známých hanojských věží. Rekurze nejsou v systému BOANANZA umožněny.
předchozí lekce (1.16) obsah kurzu následující lekce (1.18)

OZOGAN, 1 Máje 97, 460 01 Liberec
tel.,fax: (048) 52 28 338, e-mail: info@ozogan.cz