持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第45天,点击查看活动详情
IF中使用GOTO
- 如果在IF代码块中使用GOTO,注意以下死循环。
ClassMethod IF5()
{
s x = 1
Loop
if x >= 1{
w "无限循环",!
s x = x + 1
goto Loop
}
w !,"结束"
}
循环命令
For命令
FOR是面向块的命令。通常,它由一个计数器和一个用大括号括起来的可执行代码块组成。此代码块的执行次数由计数器确定,计数器在每个循环体的顶部进行测试。for命令不指定递增计数器。它可以是无参数的(无限循环直到退出),也可以指定一个表达式作为其参数(循环一次)。
FOR var=forparameter { code }
F var=forparameter { code }
FOR var=forparameter1,forparameter2,... { code }
F var=forparameter1,forparameter2,... { code }
expr
start:increment
start:increment:end
- 不带参数的for无限执行循环代码块,直到由代码块内的命令退出。重复括号内的命令,直到遇到退出循环的Quit、Return或GOTO命令。
ClassMethod For(x)
{
for {
w "x=", x,!
s x = x - 1
q:(x = 3)
}
q "结束"
}
- 错误也会中断for循环。此for循环由CATCH块捕获的被零除错误退出:
ClassMethod For1(x)
{
try {
for {
s y = 4 / x
w "4/", x, "=", y,!
s x = x - 1
}
w "FOR代码块之后的下一个命令"
}
catch exp {
w !,"异常处理模块",!
if 1 = exp.%IsA("%Exception.SystemException") {
w "Name: ", exp.Name,!
w "Location: ", exp.Location,!
w "Code: ", exp.Code
}else {
WRITE "其他异常",!
}
}
ret "结束"
}
- 使用 FOR var=expr时,执行for循环的次数等于expr中逗号分隔值的次数。
ClassMethod For2()
{
s val = 4
for num = val {
w num*3,!
}
q "结束"
}
- for的参数设置为值列表的变量。
ClassMethod For3()
{
for color = "red", "black", "white", "green" {
w color,!
}
q "结束"
}
- 使用 FOR var=start:increment:end ,参数START、INCREMENT和END分别指定起始值、增量值和结束值。
- 当第一次进入循环时,它会将起始值分配给var,并将var值与结束值进行比较。如果变量值小于结束值(如果是负增量值,则大于该值),则执行循环命令。然后,它使用增量值更新var值。(如果使用负增量,则var值会递减。)
- 循环继续执行,直到var值的增量超过结束值(或者直到遇到QUIT、RETURN或GOTO)。为了防止var超过end,Caché取消变量赋值并结束循环执行。如果增量导致var值等于结束值,则Caché最后一次执行for循环,然后终止该循环。
ClassMethod For5()
{
s str = "The darkness of the night is not black"
s len = $length(str)
for i = 1 : 1 : len - 1 {
w i," ",$e(str, i),!
}
q "结束"
}
- 使用 FOR var=start:increment,在这种形式的for命令中,没有结束值;循环必须包含QUIT、RETURN或GOTO命令才能终止循环。
ClassMethod For6()
{
for i(1) = 0 : 7 {
q:$length(i(1))=3
w i(1),!
}
}
- 使用 FOR 多值参数,依次执行多个参数循环体。
ClassMethod For7()
{
for i = 1 : 1 : 10, 10 : 10 : 100, 100 : 100 : 1000 {
w i,!
}
}
- 点语法(不推荐,废弃结构),传统的FOR命令是面向行的。它执行的循环由在同一程序行中跟随它的命令组成。不使用花括号,并且行格式是固定的。
ClassMethod For8()
{
s color(1) = "red"
s color(2) = "black"
s color(3) = "white"
s color(4) = "green"
s ID = ""
f s ID = $o(color(ID)) q:(ID = "") d
.w "点语法:" _ color(ID),!
s ID = ""
for {
s ID =$o(color(ID))
q:(ID = "")
w "块语法:" _ color(ID),!
}
q "结束"
}
- 注意:经常犯错误的写法。
ClassMethod For4()
{
s color(1) = "red"
s color(2) = "black"
s color(3) = "white"
s color(4) = "green"
s ID = ""
f ID = $o(color(ID)) q:(ID = "") d
.w color(ID),!
q "结束"
}