COBOL 中何时使用点?

问题描述 投票:0回答:6

我对 COBOL 完全陌生,我想知道:

好像没有什么区别

DISPLAY "foo"

DISPLAY "foo".

行尾的点实际上有什么作用?

我什么时候应该使用/避免它?

cobol gnucobol cobol85
6个回答
10
投票

句号结束“句子”。它会对你的逻辑产生影响。考虑...

IF A = B
    PERFORM 100-DO
    SET I-AM-DONE TO TRUE.

...还有...

IF A = B
    PERFORM 100-DO.
    SET I-AM-DONE TO TRUE

两个示例中的 IF 都以句点结束。在第一个中,I-AM-DONE 88 级别是有条件设置的,在第二个中是无条件设置的。

许多人更喜欢使用明确的范围终止符,并且仅使用一个句点(通常单独在一行上)以使其脱颖而出,以结束一个段落。


7
投票

我是凭记忆打字的,所以如果有人有更正,我将不胜感激。

Cobol 1968 要求使用句点来结束部门名称、程序部门段落名称或程序部门段落。每个数据划分元素都以句点结束。

Cobol 68 中没有明确的作用域终止符,例如 END-IF。还使用句点来结束范围。 Cobol 1974 带来了一些与经期无关的变化。

Cobol 程序员倾向于用句点结束 Cobol 程序中的每个句子,而不是尝试记住句点规则。

随着 Cobol 1985 中范围终止符的引入,Cobol 编码人员可以消除过程划分段落中的大部分句点。 Cobol 85 程序的过程划分中所需的唯一句点是终止 PROCEDURE DIVISION 语句、终止第一段/节标题之前的代码(如果有)、终止段落/节标题、终止段落/节并终止程序(如果没有段落/部分)。

不幸的是,这吓坏了按照 Cobol 68 和 74 标准编码的 Cobol 程序员。直到今天,许多 Cobol 商店都强制执行一条编码规则,即每个过程划分语句都以句点结束。


4
投票

在哪里使用!

有2种形式可以使用积分。

您可以在 SECTION 中的每个动词后面使用 POINT。 示例:

0000-EXAMPLE   SECTION.

   MOVE 0 TO WK-I.

   PERFORM UNTIL WK-I GREATER THAN 100
        DISPLAY WK-I
        ADD 1 TO WK-I
   END-PERFORM.

   DISPLAY WK-I.

   IF WK-I EQUAL ZEROS
      DISPLAY WK-I
   END-IF.

0000-EXAMEPLE-END. EXIT.

请注意,我们在每个动词后面使用点,除了 PERFORM、IF 等内部...

另一种使用的形式是:仅在部分末尾使用一个点,如下所示:

0000-EXAMPLE   SECTION.

   MOVE 0 TO WK-I

   PERFORM UNTIL WK-I GREATER THAN 100
        DISPLAY WK-I
        ADD 1 TO WK-I
   END-PERFORM

   DISPLAY WK-I

   IF WK-I EQUAL ZEROS
      DISPLAY WK-I
   END-IF

   .    <======== point here!!!!!!! only HERE!

0000-EXAMEPLE-END. EXIT.

但是,我们总是在 EXIT 和 SECTION 之后......


1
投票

当我选择时,我仅在必要时使用句号/句号。然而,当地标准通常另有规定:就这样吧。

由句号/句号引起的问题在于,当代码“with”被复制到代码“without”时,意外地产生了无条件的东西,而编码员的大脑被安全地留在停车场。

另外一件需要注意的事情是(希望是)在 IBM Mainframe Cobol 中使用 NEXT SENTENCE 的“旧”程序。 “NEXT SENTENCE”是指“在下一个句点/句点之后”,在“稀疏句点/句点”代码中是段落/部分的结尾。事故等待发生。进行规范更改以允许将“NEXT SENTENCE”更改为“CONTINUE”。


0
投票

“意外地创造出无条件的东西”正是应该使用句号的原因。省略句号会产生控制和易于使用的错觉,而实际上恰恰相反。看到句点会直接告诉您您不再处于条件代码中。使用句点是 COBOL 不为人知的优点之一。将代码移入和移出条件代码时,更重要的是要认识到您正在以影响流程的方式更改代码,而不考虑缩进。无论您是否直接更改线路上的任何内容,这些线路的执行都可能会改变。 END 范围指示器也很棒,但句点也很棒。


0
投票

刚刚在我的

Cobol 85
程序中测试了这一点,删除了程序中的所有句点,效果很好。

示例:

PROCEDURE DIVISION.                                                          
     MAIN-PROCESS.                                                    
        READ DISK-IN                                                  
         AT END                                                       
          DISPLAY "NO RECORDS ON INPUT FILE"                          
          STOP RUN                                                   
        ADD 1 TO READ-COUNT.                                          
        PERFORM PROCESS-1 UNTIL END-OF-FILE.                 
                                                                      
     WRITE-HEADER.                                                    
        MOVE HEADER-INJ-1 TO HEADER-OUT-1                             
        WRITE HEADER-OUT-1.                                           
                                                                      
     CLOSE-FILES.                                                     
        CLOSE DISK-IN                                                 
        CLOSE DISK-OUT                                                
        DISPLAY "READ: " READ-COUNT                                   
        DISPLAY "WRITTEN: " WRITE-COUNT                               
                                                                      
        SORT SORT-FILE ON ASCENDING SER-S                         
         USING DISK-OUT                                               
         GIVING DISK-OUT                                              
                                                                      
         STOP RUN.  
© www.soinside.com 2019 - 2024. All rights reserved.