4.5.4 流程控制步骤
默认序列中的步骤是按顺序执行的,而流程控制步骤可以额外控制步骤的执行方式。比如:条件执行语句可以选择性地执行某些步骤;循环语句可以使步骤多次运行;Goto语句可以直接跳转,打破执行顺序。如果读者有过文本编程的经验,对于这些语句应该并不陌生,它们的原理基本是相通的。大体上可将TestStand中的流程控制步骤分为三类。
条件执行语句:if-else if-else和Select-Case
循环语句:For-For Each/While-Do While以及循环控制语句Break/Continue
Goto语句
1.条件执行语句
if语句有三种使用方法,第一种为直接if:
if(表达式)语句;
第二种为if-else:
以上适用于两个分支的情况,当出现多个条件分支时,可以采用第三种if-else if-else:
由于这些步骤的使用比较直观,也没有需要特别配置的地方,比较容易在TestStand中掌握上述三种if语句的使用方法。
在范例资源的第4章练习中,附有例程<Exercises>\Chapter 4\Flow Control\If_ElseIf_Else.seq,读者可以通过菜单命令“ExecuteSingle Pass”运行该范例并观察结果。思考:如果将Locals.Index的值改为1,将会执行哪个分支?
Select-Case步骤类似于文本语言中的Switch-Case语句。如果Select表达式的值与某个Case分支中的常量表达式的值相等,则执行该Case分支。与文本语言中Switch-Case语句的不同之处在于:Select-Case步骤中,任何时候,只要有一个Case分支匹配,则在执行完该分支后,立刻跳出整个Select-Case结构,即最多只有一个Case分支被执行,并且它不需要Default默认分支。
Select-Case的形式如下:
在范例资源的第4章练习中,附有例程<Exercises>\Chapter 4\Flow Control\Select_Case.seq,读者可以通过菜单命令“ExecuteSingle Pass”运行该范例并观察结果。思考:如果将Locals.Name的值改为“Short”,将会执行哪个分支?
2.循环语句
在循环语句中,For循环和While循环的区别在于For循环是执行固定的次数,而While循环的执行次数预先是不知道的,由循环继续条件(Loop Condition)决定。首先看For循环,当在序列中添加For步骤时,TestStand会自动添加一个对应的End步骤,如图4-60所示;For Each、While、Do While等类似。
图4-60 自动添加End步骤
For循环的使用方式有两种,一种是“Fixed Number of Iterations”(固定循环次数),如图4-61中,配置循环次数为“3”,循环变量设为“Locals.x”,当填写完这两项设置之后,右侧的“Initialization”、“Condition”、“Increment”表达式就自动生成了。可以用如下伪码表示:
图4-61 For步骤特定配置页
For循环的另一种方式是“Custom Loop”,在这种模式下,需要手动输入初始化、循环条件、循环增量,这种方式的好处是更灵活。
在范例资源的第4章练习中,附有例程<Exercises>\Chapter 4\Flow Control\For.seq,读者可以通过菜单命令“ExecuteSingle Pass”运行该范例并观察结果。
For Each的作用和For类似,它是和一个数组关联起来的。举个例子,某一维数组的长度为10,那么For Each就将执行10次,每次循环将访问该数组中当前索引下的元素。关于For Each不做过多介绍,有兴趣的读者可以查看帮助文档,并运行例程<Exercises>\Chapter 4\Flow Control\ForEach.seq。
While与Do While的区别在于,While循环会先判断循环条件是否得到满足,若条件满足才执行语句,而Do While则会先执行语句,再去评估循环条件,所以Do While中包含的语句至少会被执行一次。
在范例资源第4章练习中,附有例程<Exercises>\Chapter 4\Flow Control\While_DoWhile.seq,读者可以通过菜单命令“ExecuteSingle Pass”运行该范例并观察结果,体会While与Do While的区别。
所有的循环语句都可以用Break语句跳出循环,用Continue语句结束本次循环。Break语句用于从循环体内跳出,提前结束循环,程序接着执行循环后面的语句。Continue语句是强制跳过当前循环中剩余的语句而执行下一次循环,其作用为结束本次循环。Continue语句只结束本次循环,而不是终止整个循环的执行,Break语句则是结束整个循环过程。Break和Continue语句一般与if语句一起使用,例如:
3.Goto语句
Goto语句会改变序列执行的顺序,它指向序列中的某个步骤(跳转目标),这样TestStand执行到Goto语句时,会直接跳转到该步骤。在TestStand中,一般会使用标签作为跳转目标,标签之后紧接着是相关的测试步骤,这样做的好处是修改或删除测试步骤时,不会影响Goto语句正常跳转。Goto语句不可滥用,由于它改变了序列的执行顺序,增加了调试和追踪的难度,并且多次采用Goto语句跳转,可能导致死循环。