6.5 IF语句
IF语句总是跟某些判断条件联系在一起的,它会根据条件的判断结果决定程序所要采取的动作。下面显示的是IF语句的语法。其中,条件(Condition)可以是简单条件(Simple Condition),也可以是复合条件(Complex Condition),关于它们我们接下来会做详细的讨论。要执行的语句(StatementBlock)跟在THEN短语或ELSE短语之后,分别表示条件满足和不满足时所要执行的动作。如果指定NEXT SENTENCE语句,程序会转移到离IF语句最近的句号(.)后面的语句,这样,为了不引起误会,我们建议当指定NEXT SENTENCE时,就不要使用END-IF短语,因为在NEXT SENTENCE后即使指定了END-IF短语,当执行NEXT SENTENCE语句时,程序也不会转移到紧跟在END-IF后面的语句中,而是仍然会转移到离该IF语句最近的句号(.)后面的语句中,请你记住这一点,好多程序员经常犯这样的错误。
条件可以分为简单条件和复合条件两种。简单条件又可以分为关系条件(Relation Condition)、类别条件(Class condition)两种。
关系条件是最常见的条件类型,主要用于说明两个变量之间的大小关系。下面是关系条件的语法。
正负条件(Sign Conditions)用来判断算术表达式的正(>0)、负(<0)或零的关系。下面是它的语法,其中,ArithExp是要判断的变量或表达式,正负条件是表达关系条件的另外一种形式。
尽管COBOL对数据类型的定义不是很严格或清晰的,但依然可以将数据项分成数字或字符这样的大类。类别条件(Class Condition)就是用来判别数据项的类别的。下面是类别关系的语法。
COBOL语言定义的数据类别如下。
● 数字(Numberic):字段中只包含数字0~9(如果PIC中定义为有符号的),其USAGE短语只能是DISPLAY或PACKED-DECIMAL(COMP-3)。
● 字符(Alphabetic):整个字段中只包含字符(A~Z、a~z和空格)。
● 小写字符(Alphabetic-Lower):整个字段中只包含小写字符(a~z)或空格。
● 大写字符(Alphabetic-Upper):整个字段中只包含大写字符(A~Z)或空格。
复合条件(Complex Condition)是简单条件用AND或OR组合起来的复杂条件。就像简单条件一样,复合条件的值也只能是真(True)或假(Flase)。下面是复合条件的语法:
一般来说,复合条件是按照从左到右的顺序判断的,但是,括号和下面的优先规则具有更高的优先级,复合条件的优先级是:
● NOT。
● AND。
● OR。
当一个数据项要多次出现在关系条件中时,可以只写一次。比如,图6.4左右两边的IF语句是相同的。
图6.4 等价的IF语句描述
IF语句可以嵌套使用,下面是嵌套IF语句的例子。
IF Item-Class = “A” THEN DISPLAY 'He is Class A' ELSE IF Item-Class = “B” THEN DISPLAY 'He is Class B' ELSE DISPLAY 'He is Class C' END-IF
条件名也可以在IF语句中使用,比如,我们前面定义的介绍条件名定义的变量GRADE-A、GRADE-B等,都可以用到IF语句中。如果我们继续使用下面的数据定义,则图6.5左边和右边方框中的IF语句就是等价的。
05 STUDENT-TYPE PIC X. 88 GRADE-A VALUE 'A'. 88 GRADE-B VALUE 'B'. 88 GRADE-C VALUE 'C'. 88 GRADE-O VALUE 'D' OR 'O'.