条件命令

简介: 条件命令

条件命令

if,elseif,else命令

IF将表达式作为参数,并计算该表达式为TRUE或FALSE。如果为true,则执行表达式后面的代码块;如果为false,则不执行该代码块。通常用值1和0表示这些值。但是,Caché对值执行条件执行,如果其计算结果为0(零),则将其计算为false,如果计算结果为非零值,则计算为True。

IF结构允许计算多个条件,并指定根据这些条件运行哪些代码。与简单命令相反,构造由一个或多个命令关键字、它们的条件表达式和代码块组成。IF结构由以下部分组成:

  • 一个带有一个或多个条件表达式的if子句。
  • 任意数量的ELSEIF子句,每个子句都有一个或多个条件表达式。ELSEIF子句是可选的;可以有多个ELSEIF子句。
  • 最多只有一个ELSE子句。没有条件表达式,ELSE子句是可选的。
ClassMethod IF(str)
{
  if str = 1 {
    w "str = 1"
  } elseif str = 2 {
    w "str = 2"
  } elseif str = 3 {
    w "str = 3"
  } elseif str = 4 {
    w "str = 4"
  } else {
    w "str = 其他"
  }
}
复制代码

传统的IF命令是面向行的。要执行的命令必须在同一程序行中跟随它。不使用花括号,并且行格式是固定的。新的IF命令是块结构的;它执行的块由在IF命令后的花括号内找到的命令组成。行格式(空格,换行符)没有限制。 IF的新版本不使用$TEST特殊变量。

ClassMethod IF6()
{
  s x = 1
  i x = 1  w "走了if " d Sub1(x) 
  e  w "同时也走了else " d Sub2(x)
  q
Sub1(y)  
  i y = 2 
  w "走了Sub1 ",!
  q
Sub2(z)  
  w "走了Sub2 ",!
  q
}
复制代码

注意:该面向行的点语法ELSE关键字可以缩写为E。(不能缩写为面向块的新型ELSE关键字。)IF和ELSE的新旧形式在语法上是不同的,不应结合使用;因此,一种类型的IF不应与另一种类型的ELSE配对。

/// d ##class(YX.M18).IF1(1)
ClassMethod IF1(str)
{
  if str = 1 {
    w "str = 1"
  } else {
    w "str = 其他"
  }
  if str = 1 d
  .w "str = 1"
  e  d
  .w "str = 其他"
}
复制代码

IF中使用QUIT

如果在IF代码块(或ELSEIF代码块或ELSE代码块)中遇到QUIT命令,则QUIT的用法与直接QUIT命令相同,可视为该代码块不存在一样。此用法不同于任何其他类型的大括号代码块内的退出(For、While、Do...While、Try或Catch)。

  • 如果IF代码块未嵌套在循环结构中,或未嵌套在TRY或CATCH块中,则QUIT退出当前例程。
ClassMethod IF2()
{
  s y = $random(10)
  if y # 2 = 0 {
    w y," 偶数",!
    q
    w "偶数,此处永远不会被执行"
  } else {
    w y, " 奇数",!
    q
    w "奇数,此处永远不会被执行"
  }
  w "此处永远不会被执行"
}
复制代码
  • 如果IF代码块嵌套在循环结构(如FOR代码块)中,则QUIT退出循环结构块,并继续执行循环结构代码块后面的命令。
ClassMethod IF3()
{
  for x = 1 : 1 : 8 {
    if x # 2 = 0 {
      w x," 偶数",!
      q:x=4
    } else {
      w x," 奇数",!
    }
  }
  WRITE "循环执行完毕",!
  q "结束"
}
复制代码
  • 如果IF代码块位于TRY块或CATCH块内,则QUIT将退出TRY或CATCH块,并继续执行TRY或CATCH块后面的命令。
ClassMethod IF4()
{
  try {
    s y = $random(10)
    if y # 2 = 0 {
      w y," 偶数",!
      q
      w "偶数,此处永远不会被执行"
    } else {
      w y, " 奇数",!
      q
      w "奇数,此处永远不会被执行"
    }
    w "此处永远不会被执行"
  } catch exp1 {
    w "仅在发生错误时写入",!
    w "Error Name: ",$zcvt(exp1.Name,"O","HTML"),!
  }
  try {
    w "转到下一个TRY块",!
  } catch exp2 {
    w "仅在发生错误时写入",!
    w "Error Name: ",$zcvt(exp2.Name,"O","HTML"),!
  }
  q "结束"
}



相关文章
|
1天前
|
Shell
shell学习(六) 【case多条件分支语句】
shell学习(六) 【case多条件分支语句】
19 1
|
5月前
哇,三目(条件)的顺序真有趣
@(太开心) 今天看到这样的代码
13 1
|
10月前
|
Shell
一.条件选择:if语句
一.条件选择:if语句
99 0
|
11月前
|
SQL 关系型数据库 MySQL
避免在where子句中使用 or 来连接条件
避免在where子句中使用 or 来连接条件
|
SQL 关系型数据库 MySQL
三、避免在where子句中使用 or 来连接条件
三、避免在where子句中使用 or 来连接条件
101 0
|
Shell
Shell条件测试符及if条件语句
Shell条件测试符及if条件语句
124 0
|
Shell
shell for if 循环中判断条件来执行命令
备份所有 .pid 的文件为 .pid.backup
1062 0
|
程序员 Python 开发者