Cobol scoped终结者

时间:2013-05-01 06:57:33

标签: cobol

考虑以下代码。 B的结果是什么?我的问题是NEXT-SENTENCE语句影响哪个终结符?

A = 1
B = 1
C = 1

IF A = B                                  
   IF A = C                                      
      NEXT SENTENCE                                   
   ELSE                                               
      PERFORM SOMETHING THRU SOMETHING-END  
      IF RETKD = 0                                  
         EXIT.                 

B = 2                       
EXIT.                                                 

3 个答案:

答案 0 :(得分:5)

它应该转到下一句,紧接在第一个EXIT之后的句号之后。

因此B应设为2。

COBOL由句点终止的句子组成,每个句子可以包含多个语句。 NEXT SENTENCE用于句子(有趣的是)。

您可能要考虑的另一件事是使用END-IF来使事情明确。

答案 1 :(得分:2)

B的值将是2.始终,每次,无论PERFORM中发生什么,无论RETKD如何。

IF在第一个完整停止/期间终止,“NEXT SENTENCE”将在该全停/周期后立即“转到”该行。

退出Cobol没事。没有。没有。从代码看来,作者(我假设你已经选择了“维护”程序)期望EXIT实际上做了些什么。它没有。这是一个“无操作”动词,如CONTINUE。

这似乎是“逻辑的类型”(显然可以用不同的方式编写)直接来自缩进和代码感觉EXIT做了某些事情的假设(否则IF本身是没有意义的,如NealB's所示)代码包含在下面)。

IF  ( A EQUAL TO B )
AND ( A EQUAL TO C )                                      
    PERFORM SOMETHING THRU SOMETHING-END  
    IF RETKD NOT EQUAL TO ZERO
        MOVE 2 TO B
    ELSE 
        CONTINUE
ELSE
    MOVE 2 TO B
END-IF
.

正如NealB评论的那样,这就是该计划正在做的事情:

IF (A = B) AND (A NOT = C)
    PERFORM SOMETHING THRU SOMETHING-END
END-IF
MOVE 2 TO B

CONTINUE和EXIT是等效的,实际上是可以互换的(虽然我不推荐它,因为有些人在某些代码中间看到EXIT,往往认为它有所作为,不是吗?)。

对于新代码,请不要使用NEXT SENTENCE,也不要使用句号/句号来终止条件。对前者使用CONTINUE,对后者使用“范围终止符”(END-IF,END-EVALUATE,END-PERFORM等)。

尝试使用这段代码来了解CONTINUE / EXIT的作用(NOTHING)。

IF A EQUAL TO B
    CONTINUE
    MOVE 2 TO A
ELSE
    IF A EQUAL TO C
        CONTINUE
        MOVE 3 TO A
    ELSE
        do something
    END-IF
    CONTINUE
    MOVE 4 TO C
 END-IF

A = 1 B = 1 C = 1

使用上述值,A的结尾值为2,C的值为1.

A = 1 B =不是1 C = 1

现在A为3,C为4。

A = 1 B =不是1 C =不是1

现在A为1,C为4。

然后将所有CONTINUE更改为EXIT并记下结果。

答案 2 :(得分:1)

正如paxdiablo所说,它将转移到下一句话(基本上是在'。'之后)。

另外,我建议使用Continue而不是'NEXT SENTENCE'(并使用end-if's)。 Next Sentence可以追溯到最初的Cobol,而Continue则是End-if控件

IF A = B                                  
   IF A = C                                      
      NEXT SENTENCE                                   
   ELSE                                               
      PERFORM SOMETHING THRU SOMETHING-END  
      IF RETKD = 0                                  
         EXIT
else
   compute e = 123.   

在下文中,继续将跳转到 compute ff = 321

IF A = B                                  
   IF A = C                                      
      continue                                   
   ELSE                                               
      PERFORM SOMETHING THRU SOMETHING-END  
      IF RETKD = 0                                  
         EXIT
      end-if
   end-if
   compute ff = 321 
else
   compute e = 123
end-if