Parameters that Can be Passed to Global Functions

Description

You can pass any Alpha Anywhere variable type to a Global Function. This includes variables of type:

  • C (character)

  • D (date)

  • N (numeric)

  • L (logical)

  • T (time)

  • B (blob - binary large object)

  • P (pointer)

  • U (collection)

  • F (function) -the name of another global function.

You can only pass in the name of a user defined Global function. You can not pass in the name of built-in Alpha Anywhere function).

Passing in a function name is useful when you want to create a function that uses a different function internally depending on a parameter that was passed to it. For example:

function get_left as C (string as C, length as N)
    Get_left = left(string,length)
end function
function get_right as C (string as C, length as N)
    Get_right = right(string,length)
end function
function get_string as C (string as C, length as N, function as f)
    Get_string = function(string,length)
end function

If you called this function using the command, get_string("now is the time,3, get_left), it would return the left most 3 characters of the string, (using the user-defined get_left() function).

? get_string("now is the time",3,get_right)

If you want to pass in a variable whose type you do not know in advance, you can pass the variable using the "as A" declaration. Then, in the body of your function, you can test the variable's type.

function what_type as C (input as a)
    What_type = typeof(input)
end function

Use the pointer type when you want to pass in multiple variables at once, and return multiple variables. For example:

function adjust as P (who as P)
    Who.firstname= upper(who.firstname)
    Who.lastname = upper(who.lastname)
    Who.salary = who.salary*1.1
    Adjust = who
end function

Now, test out the function :

dim person as P
Person.firstname = "Fred"
Person.lastname = "Thomas"
Person.salary = 35500
X = adjust(person)
? x.salary
= 39050.000000
? person.salary
= 39050.000000

To reference an array in a function, use the pointer type. For example:

function capitalize as P (input_array as P)
    Size = input_array.size()
    For I = 1 to size
        Input_arrayI = upper(input_arrayI )
    Next it
    Capitalize = input_array
end function

Now, test out the function :

dim cities5 as C
Cities.initialize(<<%a%
Boston
New york
Los angeles
London
Madrid
%a%)
capitalize(cities)
? cities
= 1 = "BOSTON"
2 = "NEW YORK"
3 = "LOS ANGELES"
4 = "LONDON"
5 = "MADRID"

See Also