Funkce dovolují vkládat do hlavního programového bloku další bloky, které umožňují vracet hodnoty. Každá deklarace funkce má záhlaví, za nímž následuje blok. Funkce se volá ve výrazu svým jménem za kterým následuje otevírací závorka a to i v případě, kdy funkce nemá žádné vstupní parametry. Jestliže funkce nemá žádné vstupní parametry, následuje samozřejmě za otevírací závorkou závorka zavírací!
Příklad:
a := Test();
V rámci funkce lze používat lokální proměnné dimenzované podobně jako v záhlaví makra. Tělo procedury se ukončuje klíčovým slovem EndFunc. Uvnitř těla musí být příkaz Return s vraceným parametrem. Jestliže program příkaz Return mine a vrátí se až díky EndFunc, nevrátí žádnou hodnotu!
V bloku funkce lze psát další procedury a funkce.
Záhlaví funkce ji dává jméno a určuje případné formální parametry. Neurčuje typ vraceného parametru.
Příklad:
function Test ( A : Word;
dim B : Byte;
S : String[60])
...
return xxx;
endfunc
Při volání procedury je jí možno předávat parametry. O těchto parametrech platí stejná pravidla jako u procedur.
Narazí-li makro při svém chodu na deklaraci funkce, skočí až za její EndFunc.
Funce lze volat i pomocí příkazu call. V tomto případě nebude samozřejmě vracená hodnota využita. Jestliže nebude mít funce parametry, nepište při volání funkce pomocí call prázdné závorky.
call Test;
Příklady:
call TestD(4);
exit
function TestD(c : Word)
dim a (10) : Word;
a[9] := c;
return a[9];
endfunc
---
printup(TestA());
exit
function TestA
return TestB();
function TestB
dim a : Word;
call TestC(a);
return a;
procedure TestC(dim w : Word)
w := 45;
endproc
endfunc
endfunc
---
printup(RealIsEqual(4,4)," ",RealIsNull(0))
exit
function RealIsEqual(R1:Real;R2:Real)
return (_Abs(R1 - R2) < 0.000000001);
endfunc
function RealIsNull(R:Real)
return (_Abs(R) < 0.000000001);
endfunc
Podívejte se na: Příkazy