identifier: the name of the function
external_identifier: externally visible (to the linker) name enclosed in quotes
parameter_list:
parameter[, parameter[, ...]]
parameter:
[ByRef|ByVal] identifier [As type] [= default_value]
identifier: the name of the variable referenced in the function. If the argument is an array then the identifier must be followed by an empty parenthesis.
type: the type of variable
default_value: the value of the argument if none is specified in the call
return_type: the type of variable returned by the function
statements: one or more statements that make up the function body
return_value: the value returned from the function
A function defines a block of code which can be executed with a single statement (a function call), and provide a value back to the caller when finished (a return value). There are several reasons to use functions:
- Reduces redundancy in your program
- Enables reuse of code in many programs
- Improves readability of the program
- Improves maintainability of the program
- Makes it easy to extend your program
Access Rights : The
Public and
Private keywords specify public or private intra module-level access rights, respectively. If neither is given, the function defaults to public access (
Public).
Calling Convention : Calling convention, or the order in which arguments are pushed and popped from the stack during function calls, is specified with the
cdecl,
pascal and
stdcall keywords. If none is given, the function uses the standard convention by default (
stdcall).
Passing Arguments : Functions may receive one or more variables, or arguments, when called. These arguments are listed as
parameters in the
parameter_list. The
ByRef and
ByVal keywords specify whether the argument will be passed by reference or by value, respectively. The argument's type is given by "
As type" following the
parameter. If a parameter in the declaration is given a default value, the parameter is optional. Array parameters are specified by following an identifier with an empty parenthesis. Note that array parameters are always
ByRef and the
ByRef keyword is neither required nor allowed for array parameters. When calling a function with an array argument the parenthesis must be supplied there too; see the examples.
Overloaded Functions : An overloaded function may share the same name (
identifier) as another with a different signature. The
Overload keyword specifies that a function may be overloaded. A function must be defined - or declared - using the
Overload keyword prior to any functions that overload them.
Returning values :
return_type specifies the
data type returned by a function upon exit. If no data type is specified, then the function will return the default data type, which will be Integer unless set to another data type using
DefSng,
DefDbl,
DefStr, etc. Functions can return values using three methods: the
Return keyword followed by a value exits the function immediately, and returns that value to the caller. Functions can also return values by assigning the Function keyword or the function's
identifier to the desired return value. The latter two methods do not cause the function to exit, however.
Return keyword mixed with Function= keyword or function's
identifier= or
Exit Function keyword in a same function is unsupported when returning objects with constructors. Since functions return values, function calls evaluate to expressions. Thus, function calls can be made wherever an expression is expected, like in
Assignments or
If statements. Parentheses surrounding the argument list are required on function calls in expressions and even highly recommended if there are no arguments. Functions can also return references by specifying
Byref As return_type.
Local Variable Preservation : The
Static keyword specifies that a function's locally declared variables are preserved between function calls. Upon entering a function defined with
Static, local variables have the same value as when the function was last called.