Functions
Functions must be declared before they are used and so must be written on top of your program. However, this is not required if a function is called from within another function.
func
Variables inside a function created with func
are global. They are the seen by the entire program.
A function is created with func
as follows:
<function name>: func [<argument1> <argument2> ... <argument n>] [ <actions performed on arguments>]
7
>>
Demonstrating that variables are global:
7
7
>>
function
function
makes its variables local, i.e. it hides (shades) the variables inside it from the rest of the program.
Same program as above, only using function
instead of func
:
Different results:
7
20
>>
Forcing variables to be global with /external refinement:
22
9
>>
Defining the argument type:
You can force your arguments to be of a certain datatype
:
*** Script Error: mysum does not allow float! for its a argument
*** Where: mysum
*** Stack: mysum
>>
You may allow multiple datatypes
:
7.2
>>
Or use an upper class of datatypes
:
Returning values from functions:
The return value of a function is either the last value evaluated by the function or one explicitly determined by the word return
:
Last evaluation example:
5
>>
return
example:
15
>>
Creating your own refinements:
You can create refinements to you functions, like the native refinements of Red: <myfunction>/<myrefinement>. The refinements are boolean values that are checked by the function:
13
7
>>
Note that arguments are not mandatory for refinements.
Assigning functions to variables
To assign a function to a variable (a word) you must precede the function with a colon: <word>: :<function>
does
If your routine just do something with no arguments and no local variables, use the word does
:
Hello
Stranger
>>
has
If your routine uses no external arguments but has local variables, use the word has
. has
turns the argument into a local variable. Compare the three programs below. The first uses has
with no argument, hence number
is a global variable. The second gives number
as argument, making it local. And the third shows that a function with argument need that argument to be sent by the calling event.
exit
Exits a function without returning any values.