01 g1.
05 h1 PIC X VALUE 'N'.
88 s1 VALUE 'Y'.
88 s2 VALUE 'N'.
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,s1和s2的值是多少?它是否保持组变量(05)中给出的值,或者它将具有自己的值?
S1和S1是命名条件.根据H1的值(或在这种情况下为G1),它们将成立或不成立.
代码:
Set S1 to true
Run Code Online (Sandbox Code Playgroud)
将导致H1的值(在特定组的情况下为G1)为'Y'.如果你执行:
Set S2 to true
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
布鲁诺涵盖了88级或命名条件的大部分重要特征,但我觉得重要的是要提到他们被Cobol程序严重滥用的方式,这些程序无法放弃他们1974年的技能.
你会经常看到人们做的事情如下:
Move 'Y' to H1
Run Code Online (Sandbox Code Playgroud)
出于以下几个原因,这是一个非常糟糕的主意: - 有一天,有人会"将''移动到'H1'并且真的搞乱了你的一天 - 有人会编写类似"如果H1 ='Y'"的代码并将其制作出来无法扫描您指定条件的使用情况
有一种方法可以避免这种情况,在命名条件下使用未命名的字节.如果您的数据项如下所示:
01 G1
02 ...
02 Filler Pic X value 'N'.
03 S1 value 'Y'.
03 S2 value 'N'.
Run Code Online (Sandbox Code Playgroud)
通过跳过H1上的名称,您可以强制使用您的数据布局的其他程序员使用您的命名条件S1和S2.这有许多好处,其中最主要的是您可以始终扫描源存储库以查找命名条件,并且可以轻松识别所有更改.