Dot rules in nested conditional statements - COBOL

流过昼夜 提交于 2019-12-11 09:47:15

问题


I'm wondering if anybody can explain to me the dot ruling in nested IF statements in COBOL. Example:

*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.   

Which if statement does the dot placed after "WS-INF-REC" belong to? The first IF or the second IF-ELSE? I know that in most programming, it should be for the last if statement but just to make sure, is it the same for COBOL?


回答1:


The period character "." ends all if statements. Remember that spacing is ignored by the compiler so therefore the READ statement is part of the ELSE of the second IF statement.

Us humans want to see the indentation used logically. And, if it were me, I would make the end-if's be explicit. I tend to have one period per paragraph:

* 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
     .



回答2:


AFAIR a period always closes ALL preceding statements - regardless wether they are IF, PERFORM or whatever - so in your case the first IF-statement is closed as well. And since periods are so small and easily overlooked I use the following rule:

Avoid using periods, they are evil!

Only put a period where it is strictly required by the syntax rules and nowhere else. Use explicit scope-terminators like END-IF or END-PERFORM. They make your code more readable and clearly structured while periods tend to generate confusion because of multiple closures and their habit of hiding in plain view.




回答3:


This is really bad, very archaic Cobol, but how it behaves is like this:

*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


来源:https://stackoverflow.com/questions/24504942/dot-rules-in-nested-conditional-statements-cobol

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!