DekGenius.com
[ Team LiB ] Previous Section Next Section

8.2 Parameters

A parameter is a value passed to a handler as it is called. A handler is defined to take a certain number of parameters; this can be any number, whatever the author of the handler feels is appropriate to what the handler does. (The details on the syntax of defining and calling a handler that has parameters are addressed in the next section; right now we're just talking about what parameters are.)

For example, here's a definition of a handler that takes two parameters, and a call to that handler:

on add(x, y)
        return x + y
end add
display dialog add(3, 2)

In the last line, the handler is called with the two parameters it requires. The value 3 is passed as the first parameter; the value 2 is passed as the second parameter. In the handler definition, names that effectively designate variables local to the handler have been declared. When the handler is called, and before it actually starts executing, these names are paired with the parameters that were passed, and the corresponding values are assigned. Thus, when add( ) is called on this occasion, it is as if it had a local variable x which has been initialized to 3, and a local variable y which has been initialized to 2.

Because the parameter names in the handler definition are local to the handler, they are invisible outside it. That's good. Any parameter names may be used within the handler without fear of confusion with other names outside the handler. For example:

on add(x, y)
        return x + y
end add
set x to 2
set y to 3
display dialog add(y, x)

In that code, what matters to the handler is that the value 3 is passed as the first parameter, and that the value 2 is passed as the second parameter. Thus, within the handler, the value 3 is assigned to x and the value 2 is assigned to y. Those are implicit locals; the handler knows nothing about the top-level names x and y (and vice versa).

A parameter name cannot be declared global within the handler, just as a local cannot be redeclared global (see Section 7.4.7).

It is a runtime error to call a handler with fewer parameters than the definition of the handler requires. There is no way to declare a parameter optional in AppleScript. On the other hand, you really don't need a way to do this, because a parameter can be a list or a record, which can have any number of items.[1]

[1] All we need is a shift command and this would be Perl!

For example, here's a handler that calculates the area of a rectangle given the lengths of the two sides. If you pass the length of only one side, the rectangle is assumed to be a square:

on area(L)
        set a to item 1 of L
        if (count L) = 2 then
                set b to item 2 of L
        else
                set b to item 1 of L
        end if
        return a * b
end area
area({3, 4}) -- 12
area({3}) -- 9
    [ Team LiB ] Previous Section Next Section