We distinguish between external and internal functions. External functions are the BDL functions that are readily available for use, like for example WebPageUrl. Internal functions are functions that are implemented within your script. Random variables can be used as parameters of internal and external functions. Both external and internal functions can also be used as parameters of other external and internal functions.
FunctionSection = "DCLFUNC" { Function }.
Function = [ @DEPRECATED [ "(" NewFuncName ")" ] ] "FUNCTION" ident [ "(" TParList ")" ]
[ ":" RType ] [FuncAttribute]
[ "CONST" ConstDecl ]
[ "VAR" VarDecl ]
"BEGIN" StatSeq "END" [ ident ] ";".
TParList = TParam { ";" TParam }.
TParam = IdentList ":" PType PModifier.
PType = ["ARRAY" | "LIST" "OF" ] "STRING" "(" number ")"
| ["ARRAY" | "LIST" "OF" ] "NUMBER"
| ["ARRAY" | "LIST" "OF" ] "BOOLEAN"
| ["ARRAY" | "LIST" "OF" ] "FLOAT"
| "SQL"
| "FORM".
PModifier = "allownull" | "optional" [ ":=" (signum | float | boolean | ident)].
RType = "STRING" "(" number ")"
| "NUMBER"
| "BOOLEAN"
| "FLOAT".
FuncAttribute = "<" FuncAttributeValue ">"
| Section | Description |
|---|---|
| ident | The name of the function. |
| ConstDecl | The declarations of the function constants. |
| VarDecl | The declarations of the function variables. |
| StatSeq | The statements of the function. |
| FuncAttributeValue | Specifies attributes for the function. The following options are valid:
|
benchmark BenchmarkName
use "kernel.bdh"
const
MAX_ARRAY := 5;
// Definition of global variables: string, number, float, boolean, array
var
sa1 : array [MAX_ARRAY] of string init "string1", "string2",
"string3", "string4", "string5" ;
na1 : array [MAX_ARRAY] of number init 1,2,3,4,5 ;
dclfunc
function foo1 (psa1 : array of string; pna1: array of number; len :
number):number
var i : number;
begin
for i := 1 to len do
Print(psa1[i]);
Print(string(pna1[i]));
end;
end foo1;
function Func1(p1: number; s: number optional): number
var
i, j: number;
begin
if s = 0 then
j := 1
else
j := s
end;
for i := 1 to p1 do
j := j*i;
end;
Func1 := j;
end Func1;
function Func2(p1: number)
var
i, j: number;
begin
j := 1;
for i := 1 to p1 do
j := j*i;
end;
p1 := j;
end Func2;
function Func3
begin
write( "TestFunc was sucessfull");
end Func3;
dcluser
user
VirtUser
transactions
TestFunc : 1; // Transactions
dcltrans
transaction TestFunc
var
l, m: number;
begin
foo1(sa1,na1,MAX_ARRAY);
l := Func1(10);
m := Func1(l);
Func2(l);
Func3();
end TestFunc;