点规则嵌套条件语句 - COBOL(Dot rules in nested conditional

2019-10-20 09:38发布

我想知道如果任何人都可以给我嵌套IF在COBOL语句解释点裁决。 例:

*The first if statement*
 IF SUCCESSFUL-STATUS 
     PERFORM 8300-REPL-LNNTBI00 
        THRU 8300-REPL-LNNTBI00-EXIT 
*The second if statement*
        IF SUCCESSFUL-STATUS 
            DISPLAY 'RECORD ALREADY UPDATED :' WS-INF-REC
        ELSE 
            DISPLAY 'UPDATE ERROR : ' WS-INF-REC ' / ' 
            WS-RETURN-STATUS 
 READ INFILE INTO WS-INF-REC.   

这if语句不放在“WS-INF-REC”后点属于哪一种? 第一IF或第二IF-ELSE? 我知道,在大多数编程,这应该是最后的if语句,但只是为了确保,是同为COBOL?

Answer 1:

句点字符“” 所有的if语句结束。 请记住,间隔由编译器忽略这样因此READ语句是第二个IF语句的ELSE的一部分。

我们人类希望看到的逻辑所使用的压痕。 而且,如果是我,我会做到底,如果的是明确的。 我往往有每个段落一个周期:

* The first if statement *
     IF SUCCESSFUL-STATUS 
       PERFORM 8300-REPL-LNNTBI00 
         THRU 8300-REPL-LNNTBI00-EXIT 
* The second if statement*
       IF SUCCESSFUL-STATUS 
         DISPLAY 'RECORD ALREADY UPDATED :' WS-INF-REC
       ELSE 
         DISPLAY 'UPDATE ERROR : ' WS-INF-REC ' / ' 
           WS-RETURN-STATUS 
         READ INFILE INTO WS-INF-REC
       END-IF
     END-IF
     .


Answer 2:

AFAIR一段时间总是关闭所有的语句前面-无论它们是否是IFPERFORM或什么-所以你的情况下,第一IF语句来关闭为好。 而且,由于时间是如此之小,容易被忽视我使用以下规则:

避免使用期间,他们是邪恶的!

只有把在那里严格的语法规则需要和其他地方一段时间。 使用明确的范围,终止样END-IFEND-PERFORM 。 他们使你的代码更易读,结构清晰,同时期容易产生因为多次关闭和其藏匿在普通视图中的习惯的混乱。



Answer 3:

这是非常糟糕的,很古老的Cobol,但如何它的行为是这样的:

*The first if statement*
IF SUCCESSFUL-STATUS 
    PERFORM 8300-REPL-LNNTBI00 
       THRU 8300-REPL-LNNTBI00-EXIT 
*The second if statement*
    IF SUCCESSFUL-STATUS 
        DISPLAY 'RECORD ALREADY UPDATED :' WS-INF-REC
    ELSE 
        DISPLAY 'UPDATE ERROR : ' WS-INF-REC ' / ' WS-RETURN-STATUS 
        READ INFILE INTO WS-INF-REC
    END-IF ## from period
 END-IF ## from period


文章来源: Dot rules in nested conditional statements - COBOL