AppleScript_ The Definitive Guide - Matt Neuburg [62]
Script objects, handlers, variables, and code constitute the entire structure of a script. There is nothing else. Together they are AppleScript's "gang of four," the sole and supreme rulers of the AppleScript world. We have now mapped that world completely. Let's review. At the top is the script object; the script itself is a script object. At the top level of a script object there can be variables, handlers, and script objects. At the top level of a handler there can be variables and script objects, but a handler cannot be nested directly in a handler. Handlers and script objects are the scope blocks, determining where their variables can be seen. Code can go only in a handler, but that handler might be a script object's implicit run handler, so in that sense code can go in a script object too.
Chapter 7. Variables
This chapter describes the rules for assignment , declaration, typing, initialization, and naming of variables in the AppleScript language.
Assignment and Retrieval
If a variable is a labelled shoebox (see "Variables" in Chapter 6), then to assign a value to a variable is to put something into the shoebox. If the variable already has a value, that value is replaced.
Assignment is performed with one of two commands: set or copy.
Reference Section
Reference Section
There is no simple assignment operator, such as the equals sign (=). You cannot, for example, perform an assignment like this:
x = 5
That is a comparison, and returns a boolean result revealing whether x is already 5. That code is legal (and therefore does not cause a compile-time error) but is not an assignment (as any mildly experienced programmer would expect); this is a frequent cause of bugs in my scripts. See "The "English-likeness" Monster" in Chapter 4.
Set by Reference
As they both perform assignment, you might think set and copy must be completely interchangeable. In most cases, they are; but with regard to four types of value—lists, records, dates, and script objects—they are not. With these data types, set sets by reference, meaning that you can end up with more than one name for the same value.
The reason why these four data types are singled out for special treatment is that they are the only kinds of value that can be mutated in place. Thus, after a set by reference, whatever mutation is performed upon such a value under one of its names applies to it under its other names as well. For example:
set L to {1, 2, 3}
set LL to L -- set by reference
set end of L to 4 -- mutate a list in place
LL -- {1, 2, 3, 4}, because it is the same list as L
For other datatypes, use whichever command you prefer; I habitually use set.
Multiple Assignment
In an assignment, variableName and value can optionally be lists—of variable names and values, respectively—allowing multiple assignments in one command. The first item in the value list is assigned to the first item in the variableName list, the second to the second, and so forth. If the value list is longer than the variableName list, the extra values are not assigned to anything; if the value list is shorter than the variableName list, there is a runtime error. This remarkably elegant feature is probably underutilized by beginners. (For a parallel construction involving assignment to a record, see "Record" in Chapter 13.) For example:
set {x,