devexpress asp.net mvc pdf viewer : Copy pdf page to clipboard SDK Library API .net asp.net windows sharepoint AppleScriptLanguageGuide28-part549

C H A P T E R   8
Handlers
About Subroutines
281
5/5/99  ã Apple Computer, Inc.
n
“Recursive Subroutines” (page 286)
n
“Saving and Loading Libraries of Subroutines” (page 287)
The Return Statement
8
A Return statement allows you to stop execution of a handler before all its 
statements are executed and to return a value. Many of the examples in this 
chapter use Return statements.
A Return statement exits a handler and returns a value. When AppleScript 
executes a Return statement, it stops handler execution and resumes execution 
at the place in the script where the handler was called, using the value returned 
as the value of the handler. 
SYNTAX
return 
expression
where
expression is an AppleScript expression. When AppleScript executes a Return 
statement, it returns the value of the expression. For related information, see 
“Expressions” (page 199).
EXAMPLE
To return a value and exit a subroutine, include a Return statement in the body 
of the subroutine. For example, the following statement returns the integer 
2
:
return 2
If you include a Return statement without an expression, AppleScript exits the 
subroutine immediately and no value is returned.
NOTES
If a subroutine does not include a Return statement, AppleScript executes the 
statements in the subroutine and, after handling the last statement, returns the 
Copy pdf page to clipboard - SDK Library API:C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use C# Code to Extract PDF Pages, Copy Pages from One PDF File and Paste into Others
www.rasteredge.com
Copy pdf page to clipboard - SDK Library API:VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Detailed VB.NET Guide for Extracting Pages from Microsoft PDF Doc
www.rasteredge.com
C H A P T E R   8  
Handlers
282
About Subroutines
5/5/99  ã Apple Computer, Inc.
value of the last statement in the subroutine. If the last statement does not 
return a value, then no value is returned.
When AppleScript has finished executing a subroutine (that is, when it executes 
a Return statement or the last statement in the subroutine), it passes control to 
the place in the script immediately after the place where the subroutine was 
called.
In general, it is best to have just one Return statement and locate it at the end of 
a subroutine or handler. For most scripts, doing so provides the following 
benefits:
n
The script is easier to understand.
n
The script is easier to debug.
n
You can place cleanup code in one place and make sure it is executed.
In some cases, however, it may make more sense to use multiple Return 
statements. For example, the 
minimumValue
subroutine in “A Sample 
Subroutine” (page 282) is a simple script that uses two return statements.
A Sample Subroutine
8
Here’s a subroutine, called 
minimumValue
, that returns the smaller of two values:
-- minimumValue subroutine:
on minimumValue(x, y)
if x < y then
return x
else
return y
end if
end minimumValue
-- To call minimumValue:
minimumValue(5, 105)
The first line of the 
minimumValue
subroutine specifies the parameters of the 
subroutine. These can be positional parameters—like 
x
and 
y
in the example—
where the order of the parameters is significant, or labeled parameters—like 
those for many of the AppleScript and application commands described in 
SDK Library API:VB.NET Word: VB Code to Create Windows Word Viewer | Online
a Word document can be copied into clipboard and pasted viewer; Easy to zoom in / out target Word document page; it is possible for users to copy the document
www.rasteredge.com
C H A P T E R   8
Handlers
About Subroutines
283
5/5/99  ã Apple Computer, Inc.
“Commands” (page 109)—where the order of parameters other than the direct 
parameter doesn’t matter.
The 
minimumValue
subroutine includes two Return statements. A Return 
statement is one of the ways a subroutine can return a result. When AppleScript 
executes a Return statement, it returns the value (if any) listed in the statement 
and immediately exits the subroutine. If AppleScript executes a Return 
statement without a value, it exits the subroutine immediately and does not 
return a value.
If a subroutine does not include any Return statement, AppleScript executes the 
statements in the subroutine and, after handling the last statement, returns the 
value of the last statement in the subroutine. If the last statement does not 
return a value, then the subroutine does not return a value.
When AppleScript has finished executing a subroutine, it passes control to the 
place in the script immediately after the place where the subroutine was called. 
If a subroutine call is part of an expression, AppleScript uses the value returned 
by the subroutine to evaluate the expression. For example, to evaluate the 
following expression, AppleScript calls the subroutine for 
minimumValue
, then 
evaluates the rest of the expression.
minimumValue(5, 105) + 50 --result: 55
For related information, see “Using Results” (page 121) and “The Return 
Statement” (page 281).
Types of Subroutines
8
There are two types of subroutines: those with labeled parameters and those 
with positional parameters.
n
Labeled parameters are identified by their labels and can be listed in any 
order. Subroutines with labeled parameters can also have a direct parameter. 
The direct parameter, if present, must be listed first.
n
Positional parameters must be listed in a specific order, which is defined in 
the subroutine definition.
For example, the following statement calls a subroutine with positional 
parameters.
minimumValue(150, 4000)
C H A P T E R   8  
Handlers
284
About Subroutines
5/5/99  ã Apple Computer, Inc.
The following statement calls a subroutine with a labeled parameter. The 
searchFiles
routine is defined in “Examples of Subroutines With Labeled 
Parameters” (page 293). The direct parameter is the list of filenames. The string 
to search for, 
"LeChateau",
is the labeled parameter.
searchFiles of {"March Expenses", "April Expenses", 
Ø
"May Expenses", "June Expenses"} for "LeChateau"
The definition for a subroutine determines what kind of parameters the 
subroutine requires. When you call a subroutine, you must list its parameters in 
the same way they are specified in the subroutine definition.
You can also have subroutines with no parameters. To indicate that a subroutine 
has no parameters, you must include a pair of empty parentheses after the 
subroutine name in both the subroutine definition and the subroutine call. For 
example, the following script shows the definition and subroutine call for a 
subroutine called 
helloWorld
that has no parameters. 
on helloWorld()
display dialog "Hello World"
end
helloWorld()
Scope of Subroutine Calls in Tell Statements
8
If you need to call a subroutine from within a Tell statement, you must use the 
reserved words 
of me
or 
my
to indicate that the subroutine is part of the script 
(not a command that should be sent to the object of the Tell statement).
For example, the 
minimumValue
subroutine call in the following Tell statement is 
unsuccessful, even if the script contains the 
minimumValue
routine defined in “A 
Sample Subroutine” (page 282), because AppleScript sends the 
minimumValue
command to AppleWorks. If you run this script, you get an error message 
saying that AppleWorks does not understand the 
minimumValue
message.
tell front document of application "AppleWorks"
minimumValue(12, 400)
copy result as string to word 10 of text body
C H A P T E R   8
Handlers
About Subroutines
285
5/5/99  ã Apple Computer, Inc.
end tell
--result: An error, because AppleWorks doesn’t
--
understand the minimumValue message.
If you use the words 
of
me
in the subroutine call, as shown in the following Tell 
statement, the subroutine call is successful, because AppleScript knows that the 
subroutine is part of the script.
tell front document of application "AppleWorks"
minimumValue(12, 400) of me
copy result as string to word 10 of text body
end tell
--result: The subroutine call is successful.
You can use the word 
my
before the subroutine call as a synonym for the words 
of me
after the subroutine call. For example, the following two subroutine calls 
are equivalent:
minimumValue(12, 400) of me
my minimumValue(12, 400)
Checking the Classes of Subroutine Parameters 
8
You cannot specify the class of a parameter in a subroutine definition. You can, 
however, get the value of the Class property of a parameter and check it to see if 
the parameter belongs to the correct class. If it doesn’t, you may be able to 
coerce it with the As operator, or failing that, you can return an error. For 
information about coercing values, see “Expressions” (page 199). For 
information about returning errors, see “Try Statements” (page 259).
Here’s an example of a subroutine that checks to see if its parameter is a real 
number or an integer. If not, the routine uses the “Error” (page 264) command 
to signal an error.
on areaOfCircle from radius
-- Make sure the parameter is a real number or an integer.
if class of radius is contained by {integer, real}
return radius * pi
-- pi is predefined by AppleScript.
else
error "The parameter must be a real number or an integer"
C H A P T E R   8  
Handlers
286
About Subroutines
5/5/99  ã Apple Computer, Inc.
end if
end areaOfCircle
-- To call areaOfCircle:
areaOfCircle from 7 --result: 21.991148575129
Recursive Subroutines
8
A recursive subroutine is a subroutine that calls itself. Recursive subroutines 
are legal in AppleScript. You can use them to perform repetitive actions. For 
example, this recursive subroutine generates a factorial. (The factorial of a 
number is the product of all the positive integers from 1 to that number. For 
example, 4 factorial is equal to 1 * 2 * 3 * 4, or 24.)
on factorial(x)
if x > 0 then
return x * (factorial(x - 1))
else
return 1
end if
end factorial
-- To call factorial:
factorial(10)
--result: 3628800
In the example above, the subroutine 
factorial
is called once from the top level 
of the script, passing the value 
10
. The subroutine then calls itself recursively 
with a value of 
x - 1
, or 
9
. Each time the subroutine calls itself, it makes 
another recursive call, until the value of 
x
is 
0
. When 
x
is equal to 
0
, AppleScript 
skips to the Else clause and finishes executing all the partially executed 
subroutines, including the original 
factorial
subroutine call.
When you call a recursive subroutine, AppleScript keeps track of the variables 
and pending statements in the original (partially executed) subroutine until the 
recursive subroutine has completed. Because each call uses some memory, the 
maximum number of pending subroutines is limited by the available memory. 
As a result, a recursive subroutine may generate an error before the recursive 
calls complete.
C H A P T E R   8
Handlers
About Subroutines
287
5/5/99  ã Apple Computer, Inc.
In addition, a recursive subroutine may not be the most efficient solution to a 
problem. For example, the factorial subroutine shown above can be rewritten to 
use a Repeat loop instead of a recursive call:
on factorial(x)
set returnVal to 1
if x > 1 then
repeat with n from 2 to x
set returnVal to returnVal * n
end repeat
end if
return returnVal
end factorial
Saving and Loading Libraries of Subroutines
8
So far, you’ve seen examples of defining and calling subroutines in the same 
script. This is useful for functions that are repeated more than once in the same 
script. But you can also write subroutines for generic functions, such as numeric 
operations, that are useful in many different scripts. To make a subroutine 
available in any script, save it as a compiled script, and then use the scripting 
addition command Load Script to make it available in a particular script. You 
can use this technique to create libraries of subroutines for use in many scripts. 
For example, the following script contains three subroutines: 
areaOfCircle
which returns the area of a circle based on its radius; 
factorial
, which returns 
the factorial of a number; and 
min
, which returns the smallest number in a list of 
numbers.
-- This subroutine computes the area of a circle from its radius.
on areaOfCircle from radius
-- Make sure the parameter is a real number or an integer.
if class of radius is contained by {integer, real}
return radius * pi
-- pi is predefined by AppleScript.
else
error "The parameter must be a real number or an integer"
end if
end areaOfCircle
C H A P T E R   8  
Handlers
288
About Subroutines
5/5/99  ã Apple Computer, Inc.
-- This subroutine returns the factorial of a number.
on factorial(x)
set returnVal to 1
if x > 1 then
repeat with n from 2 to x
set returnVal to returnVal * n
end repeat
end if
return returnVal
end factorial
-- This subroutine returns the smallest number in a list
on min(numberList) 
-- Check for a valid list.
if class of numberList is not equal to list ¬
or numberList is equal to {} then ¬
return numberList
set minNum to first item in numberList
-- If more than one item, find the smallest.
if length of numberList > 1 then
repeat with curNum in numberList
if curNum < minNum then set minNum to curNum
end repeat
end if
return minNum as number
end min
To save this script as a compiled script, choose Save As from the Script Editor’s 
File menu and choose Compiled Script from the Kind pop-up menu. Then save 
the script as a file called Numeric Operations.
After you save the script as a compiled script, use the Load Script scripting 
addition command to make the subroutines it contains available in the current 
script. For example, the Load Script command in the following script assigns 
the compiled script Numeric Operations to the variable 
numberLib
. To call the 
subroutines in Numeric Operations, use a Tell statement. The Tell statement in 
the example calls the 
factorial
subroutine. (You must have a compiled script 
called Numeric Operations in the specified location for this script to work 
correctly.)
C H A P T E R   8
Handlers
Defining and Calling Subroutines
289
5/5/99  ã Apple Computer, Inc.
set numberLib to (load script file ¬
"Hard Disk:Scripts:Numeric Operations")
tell numberLib
min({77, 905, 50, 6, 3, 111})
--result: 3
areaOfCircle from 12 
--result: 37.699111843078
factorial(10)
--result: 3628800
end tell
The Load Script scripting addition command loads the compiled script as a 
script object. Script objects are user-defined objects that are treated as values by 
AppleScript; for more information about them, see “Script Objects” (page 325). 
For more information about the Load Script command, and about the other 
standard scripting addition commands distributed with AppleScript, see the 
following website:
<http://www.apple.com/applescript/>
Defining and Calling Subroutines
8
A subroutine definition contains
n
a template for calls to the subroutine
n
optional variable declarations
n
statements; among these can be a Return statement that when executed 
returns a value and exits the subroutine 
You cannot nest subroutine definitions; that is, you cannot define a subroutine 
within a subroutine definition.
The way you call a subroutine is determined by the way the subroutine was 
defined:
n
You must provide all the parameters specified in the definition.
n
You must provide either labeled parameters or positional parameters, as 
specified in the definition.
The following sections describe how to define and call subroutines:
n
“Subroutines With Labeled Parameters” (page 290)
C H A P T E R   8  
Handlers
290
Defining and Calling Subroutines
5/5/99  ã Apple Computer, Inc.
n
“Subroutines With Positional Parameters” (page 296)
Subroutines With Labeled Parameters
8
The following sections describe the syntax for defining and calling subroutines 
with labeled parameters and provide examples of subroutines that use this 
syntax.
n
“Defining a Subroutine With Labeled Parameters” (page 290)
n
“Calling a Subroutine With Labeled Parameters” (page 291)
n
“Examples of Subroutines With Labeled Parameters” (page 293)
Defining a Subroutine With Labeled Parameters
8
The definition for a subroutine with labeled parameters lists the labels to use 
when calling the subroutine and the statements to be executed when it is called.
SYNTAX
( on | to ) 
subroutineName
¬
[ [ of | in ] 
directParameterVariable
]  
¬
subroutineParamLabel
paramVariable
]...  
¬
[ given 
label
:
paramVariable 
[,
label
:
paramVariable
]...]
[ global 
variable
[, 
variable
]...]
[ local 
variable
[, 
variable
]...]
statement
]...
end [ 
subroutineName
where
subroutineName (an identifier) is the subroutine name.
directParameterVariable (an identifier) is a parameter variable (also called a 
formal parameter) that represents the actual value of the direct parameter. You 
use this identifier to refer to the direct parameter in the body of the subroutine 
definition. As with application commands, the direct parameter must be first.
Documents you may be interested
Documents you may be interested