Online Book Reader

Home Category

AppleScript_ The Definitive Guide - Matt Neuburg [150]

By Root 1505 0
Debugger, implement stop log and start log properly. If you try to use them in Smile or in the current Script Editor, you get a runtime error.

Chapter 19. Control


Control structures are the basis of a computer program's overall logic and "intelligence." They dictate the flow of a script. They are not commands; they are the signposts that describe how commands should be treated. They tell AppleScript how to decide what command should be executed next, or what to do if a command fails at runtime. They also modify how certain commands and operators are interpreted.

Tip

When typing any block in this chapter, in the termination line just type the word end. AppleScript fills in the missing term after compilation. (So, for example, don't type end if; just type end.) This shortcut saves time and is helpful for confirming that you have correctly structured your blocks.

Branching


The "intelligent" behavior of a computer program depends upon its ability to make choices at runtime. These choices generally take the form of evaluating some expression and executing or not executing a particular block of code depending on how the evaluation turns out at that moment.

One major form of choice is branching . We have a line or block of code that can be executed optionally. The computer evaluates a boolean expression, called a condition . If the condition is true, the line or block of code is executed; if it isn't, the line or block of code is skipped, and execution jumps to the line that follows it.

In AppleScript, branching control is performed with if. An if block comes in several forms. The basic form is a single block of code that is executed only if a condition is true. If the condition is false, the block is skipped, and execution resumes after the end if line.

if condition then

-- what to do if condition is true

end if

It is also permitted to supply a second block with else, to be executed if the condition is false. One or the other of the two blocks will be executed.

if condition then

-- what to do if condition is true

else

-- what to do if condition is false

end if

Another syntax lets you specify multiple conditions. AppleScript will execute the first block whose condition is true, skipping the others. It is permitted to supply, with else, a final block that will be executed if none of the conditions is true.

if condition1 then

-- what to do if condition1 is true

else if condition2 then

-- what to do if condition2 is true

-- ... same for condition3, condition4, etc.

[else]

-- what to do if none of them is true

end if

So, for example:

set x to random number from 1 to 10

set guess to text returned of ¬

(display dialog "Pick a number from 1 to 10" default answer "")

try

set guess to guess as number

on error

return

end try

if guess < 1 or guess > 10 then

display dialog "I said from 1 to 10!"

else if guess < x then

display dialog "Too small. I was thinking of " & x

else if guess > x then

display dialog "Too big. I was thinking of " & x

else

display dialog "Just right."

end if

There's also a single-line form :

if condition thenwhatToDo

In the single-line form, whatToDo is any valid expression or single-line command (it can even be another single-line if).

Tip

When typing a multiline if block, don't bother to type the word then. AppleScript will add it at compile time.

Looping


The other major form of choice is looping , which involves branching back to the start of a block repeatedly. In AppleScript, looping is performed with repeat. There are several varieties of repeat, but repeat blocks all take same basic form:

repeat whatKindOfRepeat

-- what to do

end repeat

Tip

Loops involve repetition—perhaps a lot of repetition. Therefore, although I'm no great believer in worrying too much about optimization, if you're going to optimize your code anywhere, loops are the place to do it. A small increase in speed can add up tremendously over multiple repetitions. See Chapter 22.

The big question with a repeat block is how you're going to get out of it. Obviously you

Return Main Page Previous Page Next Page

®Online Book Reader