Specifications

Chapter 14. Statement Reference
322
Description:
Creating a user-defined function
SUB...END SUB creates a user-defined function. The function definition block
between
SUB and END SUB is a set of some statements and functions.
You cannot make double definition to a same function name.
This statement block should not be defined in the block-structured statements
(
DEF FN...END DEF, FOR...NEXT, FUNCTION...END FUNCTION, IF...THEN
...ELSE...END
IF, SELECT...CASE...END SELECT, SUB...END SUB, and
WHILE...WEND), in the error-handling routine, event-handling routine, or in the
subroutines.
SUB...END SUB functions can be recursive.
dummyparameter, which corresponds to the variable having the same name in
the function definition block, is a local variable valid only in that block. Therefore,
if a variable having the same name as
dummyparameter is used outside
SUB...END SUB statement block or used as a dummyparameter of any other
function in the same program, then it will be independently treated.
In user-defined functions, you can call other user-defined functions. You can nest
SUB...END SUB statements to a maximum of 10 levels.
When using the
SUB...END SUB together with block-structured statements (DEF
FN...END
DEF, FOR...NEXT, FUNCTION...END FUNCTION, IF...THEN
...ELSE...END
IF, SELECT...CASE...END SELECT, SUB...END SUB, and
WHILE...WEND), you can nest them to a maximum of 30 levels.
If variables other than
dummyparameter(s) are specified in the function defini-
tion block, they will be treated as local variables whose current values are avail-
able only in that function definition block, unless
PRIVATE or GLOBAL statement
is used.
EXIT SUB exits the function block prematurely and returns control to the position
immediately after the statement that called the user-defined function.
Unlike other user-defined functions,
SUB function cannot assign a return value.
Calling a user-defined function
CALL statement and subname call a user-defined function. CALL can be omitted.
The number of
realparameters should be equal to that of dummyparame-
ter
s, and the types of the corresponding variables used in those parameters
should be identical.
If you specify a global variable in
realparameter when calling a user-defined
function, the user-defined function cannot update the value of the global variable.
This is because all
realparameters are passed not by address but by value.
(So called "Call-by-value")