- FOR与监视点使用,只能在FOR中使用监视点。如果为FOR命令索引变量建立监视点,则仅在对每个FOR命令参数进行初始求值时触发特定监视点操作。
ClassMethod For9() { s color(1) = "red" s color(2) = "black" s color(3) = "white" s color(4) = "green" zb *ID s sum = 0 s ID = "" for { s ID =$o(color(ID)) q:(ID = "") s sum = sum + ID w "块语法:" _ color(ID),! } q "结束" } 复制代码
while命令
- WHILE expression,如果expression的计算结果为TRUE,则它将执行括号之间的代码块。只要expression的计算结果为TRUE,WHILE就可以重复执行。如果expression不为TRUE,则不执行括号内的代码块,并执行紧跟大括号的下一个命令。
WHILE condition {code} 复制代码
- 必须小心避免WHILE无限循环。
ClassMethod While() { s x = 1 while x < 10 { w x,! s x = x + 1 } q "循环结束" } 复制代码
- WHILE代码块可以嵌套,代码块内的GOTO命令可将执行定向到同一代码块内的标签;该标签可以在嵌套的代码块中。代码块可以将执行定向到循环外部的标签,从而终止循环。
ClassMethod While1() { s x = 1, y = 1 while x < 6 { w !,"外部循环",! s x = x + 1 label w "外循环迭代 ", x - 1,! while y < 4 { w !," 内循环迭代 ", y,! s y = y + 1 w " 返回到 " goto label w "此处永远不会被执行",! } w "内部循环完成",! } q "全部完成" } 复制代码
Do While命令
- DO WHILE执行代码,然后计算表达式。如果表达式的计算结果为True,则DO WHILE循环并重新执行代码。如果表达式不为true,则不重新执行代码,并执行Do While后面的下一个命令。
请注意,Do While始终以面向块的形式编写。要执行的代码放在do和While关键字之间,并用大括号括起来。
ClassMethod DoWhile() { s x=1 do { w x,! s x = x + 1 } while (x < 10) q "循环结束" } 复制代码
- 循环多为数组,全局变量,进程私有变量
ClassMethod DoWhile1() { s color(1) = "red" s color(2) = "black" s color(3) = "white" s color(4) = "green" s ID = "" do { s ID = $o(color(ID)) q:(ID = "") w color(ID),! } while (ID '= "") q "循环结束" } 复制代码
While、Do While和For之间的区别在于, While必须在执行循环之前测试表达式,但Do While必须在执行循环之后测试表达式,而For可以在循环内测试表达式。这意味着,如果代码块有两个部分,其中第二个部分的执行取决于表达式的求值,则for构造最合适;否则,选择取决于表达式求值应该在代码块之前还是之后。