跳转到主要内容
模块 2 · 第 2 课(共 2)课程中的4/10~12 min
模块课程(2/2)

使用 IF 和 EVALUATE 做出决策

COBOL 中的决策主要使用 IF 条件语句和多分支选择结构 EVALUATE (类似于现代语言中的 switch 或 match)来执行。

IF 条件语句

IF 语句的基本语法是:

COBOL
IF condition
    statements-if-true
ELSE
    statements-if-false
END-IF.

在现代 COBOL 版本(COBOL-85 及更高版本)中,语句必须显式以 END-IF. 结尾,而不是仅仅依赖于最后一个句点 .,从而显着减少解析和逻辑错误。

常见条件

  • 大于:> 或 GREATER THAN
  • 小于:< 或 LESS THAN
  • 等于:= 或 EQUAL TO
  • 大于或等于:>= 或 GREATER THAN OR EQUAL TO
  • 小于或等于:<= 或 LESS THAN OR EQUAL TO
COBOL
IF WS-BALANCE < 0
    DISPLAY "OVERDRAWN"
ELSE
    DISPLAY "ACCOUNT ACTIVE"
END-IF.

评估语句

当我们需要将一个变量与多个离散值进行比较时,嵌套的 IF 语句可能会变得复杂。 EVALUATE 语句通过以干净的方式构建选择来解决这个问题:

COBOL
EVALUATE WS-USER-ROLE
    WHEN "ADMIN"
        DISPLAY "FULL ACCESS"
    WHEN "EDITOR"
        DISPLAY "EDIT ACCESS"
    WHEN OTHER
        DISPLAY "LIMITED ACCESS"
END-EVALUATE.
  • WHEN OTHER:标识后备分支(相当于现代语言中的 default 或最后的 else)。
  • END-EVALUATE.:关闭结构。

自己尝试一下

锻炼#cobol.m2.l2.e1
尝试:0加载中...

编写一个 IF-ELSE-END-IF 块来检查变量 WS-USER-AGE 是否大于或等于 18。如果为 true,则打印“ADULT”,否则使用 DISPLAY 打印“MINOR”。

正在加载编辑器...
显示提示

使用 >= 进行比较,使用 DISPLAY 进行输出,使用 END-IF。 (点位于块的末尾)。

3 次尝试后可用的解决方案

锻炼#cobol.m2.l2.e2
尝试:0加载中...

完成 EVALUATE 结构以检查 WS-STATUS 变量。如果值为“A”,则打印“ACTIVE”,如果为“I”,则打印“INACTIVE”,否则对于任何其他值,则打印“UNKNOWN”。

正在加载编辑器...
显示提示

编写每个 WHEN 分支,后跟其 DISPLAY,并使用 WHEN OTHER 来处理回退。

3 次尝试后可用的解决方案