Tell 语句
Tell语句是最早接触,且最重要的流程控制语句。它的作用是指明脚本要控制的程序对象。
Tell语句具有两种语法:
- 简单形式: tell referenceToObject to statement
- 复合形式: 以 “tell referenceToObject” 开始,“end tell” 结尾。中间包含命令语句。
其中: referenceToObject为需要控制的对象,如一个应用程序、一个窗口。 statement 为命令语句,包含至少一个命令。
下面实例将关闭Finder程序中位于最前的窗口,将使用了两种形式的Tell语句,两种形式作用结果相同。
tell front window of application "Finder" to close
--这是简单形式
tell application "Finder"
close front window
end tell
--这是复合形式
通常情况下,使用Tell语句的复合形式较为常见,也便于阅读。
If 条件语句
If语句用于在满足一定条件的情况下执行语句,或者依据条件实现程序流程跳转。
- 简单形式:
if boolean then statement
- 复合形式:
if boolean1 then statement1 else if boolean2 then statement2 else statement3 end if
该复合形式程序流程如下:
其中:boolean为Boolean数据,或者判断语句(返回true或false)。 if语句中,可以有多个else if,但至多只能有一个else(可以没有)。
下面实例将根据变量mark的值,来显示相应的对话框。
set mark to 99 --修改这里的数据来观察结果
if mark ≥ 60 and mark < 80 then
set response to "You passed the exam"
else if mark ≥ 80 then
set response to "Congratulations! You're smart."
else
set response to "Sorry. You failed"
end if
display dialog response
循环语句
在AppleScript中,循环的功能非常强大,提供了至少六种循环方式。
退出循环的命令
退出循环的命令非常简单:exit(完整的为exit repeat)。 请牢记
除了exit可以强制退出循环外,return也可以起到退出循环的作用,但是return的实际意义是退出当前的事件处理器,返回脚本流程。
无限循环
这是最简单的循环,但是请慎重使用!语法如下:
repeat
--do something
end repeat
务必在无限循环语句中包含exit命令(当然,exit包含在if语句中才是正确的)
限定次数循环
语法中的“n”指定了循环多少次。 “n”必须为整数或者整型数据,且大于等于1.
repeat n times
--do something
end repeat
“直到”循环
repeat until boolean
--do something
end repeat
循环将反复执行,直到boolean为真! 也就是说,boolean为假的时候循环执行,一旦boolean为真,退出循环。
“当”循环
repeat while boolean
--do something
end repeat
当boolean为真时,循环反复执行,一旦boolean为假,退出循环。
“直到”循环 和 “当”循环 在一定意义上是正好相反的。
变量循环
repeat with loopVariable from startValue to stopValue by stepValue
--do something
end repeat
其中stepValue可省略,省略时为默认值“1”;loopVariable无需事先定义。
其执行流程如下图,请注意各个变量的用途:
这种循环用于精确控制循环次数,或者是和循环变量本身有关的循环。
List类型数据循环
这个循环较为复杂。
repeat with loopVariable in list
--do something
end repeat
其中loopVariable无需事先定义,list是List型或者Record型数据。
在循环体中,loopVariable将依次得到item 1 of list, item 2 of list...这样的指针(指向list中的第几项)。 请特别注意是指针!如果要得到list中的具体内容,使用contents of loopVariable来获得。
在这个循环里,循环体将执行和list项目数量一样的次数。
为了具体说明,看下面的例子:
set myList to {"Hello","Hi","Hey","Goodbye"} --定义一个List
--循环开始
repeat with i in myList
display dialog (contents of i) --显示一个包含List中当前指向项目的内容的对话框
set (contents of i) to "oh" --修改List中当前指向项目为“oh”
end repeat
Considering/Ignoring语句(用于文本比较)
此语句可以在比较文本时,指定忽略或考虑某一属性(如:大小写、空格等等)。
considering attribute1 but ignoring attribute2
--compare texts
end considering
上面代码含义是考虑attribute1,但忽略attribute2。
其中 but ignoring attribute2 可以省略。
considering和ignoring位置可以互换,但是end considering也要相应改成end ignoring。当然也可以选择最简略的方式---只输入end,让编译器自己不上considering/ignoring。
attribute应该为下面列表中的任意一个:
case
大小写diacriticals
字母变调符号(如:e 和 é)hyphens
连字符(-)numeric strings
数字化字符串(默认是忽略的),用于比较版本号时启用它punctuation
标点符号(,.?!等等,包括中午标点)white space
空格