14 9月, 2016

流程控制语句

内容纲要

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 空格

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注