Subroutines and functions are routines made up of a sequence of
instructions that can receive data, process it, and return a value.
The routines can be:
- Internal
- The routine is within the current program, marked by a label,
and only that program uses the routine.
- External
- A REXX subroutine that exists as a separate file.
In many aspects, subroutines and functions are the same. However,
they are different in a few major aspects, such as how to call them
and the way they return values.
- Calling a subroutine
To call a subroutine, use the CALL instruction
followed by the subroutine name (label or
program member name). You
can optionally follow this with up to 20 arguments separated by commas.
The subroutine call is an entire instruction.
CALL subroutine_name argument1, argument2,...
- Calling a function
To call a function, use the function name
(label or
program member name) immediately followed by parentheses
that can contain arguments. There can be no space between the function
name and the left parentheses. The function call is part of an instruction,
for example, an assignment instruction.
z = function(argument1, argument2,...)
- Returning a value from a subroutine
A subroutine does not have
to return a value, but when it does, it sends back the value with
the RETURN instruction.
RETURN value
The calling
program receives
the value in the REXX special variable named RESULT.
SAY 'The answer is' RESULT
- Returning a value from a function
A function
must return a value. When the function is a REXX
program, the value
is returned with either the RETURN or EXIT instruction.
RETURN value
The calling
program receives the value at the function
call. The value replaces the function call, so that in the following
example, z = value.
z = function(argument1, argument2,...)