01 g1.
05 h1 PIC X VALUE 'N'.
88 s1 VALUE 'Y'.
88 s2 VALUE 'N'.
在上面的代码中,s1和s2的值是多少?它是否保持组变量(05)中给出的值,或者它将具有自己的值?
答案 0 :(得分:6)
S1和S1是命名条件。根据H1的值(或在这种情况下为G1),它们将成立或不成立。
代码:
Set S1 to true
将导致H1(以及特定组中的G1)的值为“Y”。如果你执行:
Set S2 to true
H1(和G1再次)的值将是一个字符'N'。
这些可以使用标准关系条件进行测试。例如:
Evaluate true
when S1
Display "S1 is true"
when S2
Display "S2 is true"
End-Evaluate
If S1
Display "S1 is true"
Else
Display "S1 is false"
End-If
布鲁诺涵盖了88级或命名条件的大部分重要特征,但我觉得提及他们被Cobol程序严重滥用的方式很重要,因为Cobol程序无法放弃他们1974年的技能。
您经常会看到人们做的事情如下:
Move 'Y' to H1
出于以下几个原因,这是一个非常糟糕的主意: - 总有一天,有人会“向'移动'到'H1'并且真的搞乱了你的一天 - 有人会编写类似“如果H1 ='Y'”的代码,并且无法扫描您指定条件的使用情况
有一种方法可以避免这种情况,在命名条件下使用未命名的字节。如果您的数据项如下所示:
01 G1
02 ...
02 Filler Pic X value 'N'.
03 S1 value 'Y'.
03 S2 value 'N'.
通过跳过H1上的名称,您可以强制使用数据布局的其他程序员使用您指定的条件S1和S2。这有很多好处,其中最主要的是您可以随时扫描源存储库以查找命名条件,并且可以轻松识别所有更改。
答案 1 :(得分:4)
s1
和s2
没有值。它们是“命名条件”(所谓的88级)并且与另一个项目(条件变量)相关联。 88级别没有定义一个字段,并且不占用记录空间;它只是一个价值定义。
命名条件可以在IF语句中使用,并测试条件变量是否等于命名条件的VALUE子句中给出的任何值。
SET语句可用于使命名条件为TRUE(通过将其第一个值赋给条件变量)。
用法:
SET s1 TO TRUE
h1
将保留值'Y'
你可以用
IF h1 = 'Y'
或简称IF s1
IF s1 THEN
//do something
ELSE
//do somethingElse
END-IF