Menu

COBOL - Scope Terminators


Um terminador de escopo termina um verbo ou instrução. Os terminadores de escopo podem ser explícitos ou implícitos.

Terminadores de escopo explícitos:

Terminadores de escopo explícitos terminam um verbo sem terminar uma frase. Eles consistem em END seguido por um hífen e o nome do verbo que está sendo terminado, como END-IF.

Listados abaixo alguns dos importantes terminadores de escopo explícito.

END-ADD
END-PERFORM
END-ACCEPT
END-CALL
END-COMPUTE
END-DELETE
END-DISPLAY
END-DIVIDE
END-EVALUATE
END-IF
END-MULTIPLY
END-READ
END-RETURN
END-REWRITE
END-SEARCH
END-START
END-STRING
END-SUBTRACT
END-UNSTRING
END-WRITE

Terminador de escopo implícito:

Um terminador de escopo implícito é um ponto (.) que encerra o escopo de todas as instruções anteriores ainda não encerradas.


Exemplo:

Vamos ver o exemplo abaixo com terminadores de escopo implícito e explícito.

Terminador de escopo implícito:

IF ITEM = "A"
    DISPLAY "THE VALUE OF ITEM IS " ITEM
    ADD 1 TO TOTAL
    MOVE "C" TO ITEM
    DISPLAY "THE VALUE OF ITEM IS NOW " ITEM.   ---> IF statement end here

IF ITEM = "B"
    ADD 2 TO TOTAL.    ---> IF statement end here

Terminador de escopo explícito:

IF ITEM = "A"
    DISPLAY "THE VALUE OF ITEM IS " ITEM
    ADD 1 TO TOTAL
    MOVE "C" TO ITEM
    DISPLAY "THE VALUE OF ITEM IS NOW " ITEM
END-IF    ---> IF statement end here

IF ITEM = "B"
    ADD 2 TO TOTAL
END-IF    ---> IF statement end here

Para maior clareza do programa e para evitar finalizações não intencionais de instruções, use terminadores de escopo explícitos, especialmente dentro de parágrafos. Use terminadores de escopo implícitos apenas no final de um parágrafo ou no final de um programa.


Pontas:

Tenha cuidado ao codificar um terminador de escopo explícito para uma instrução imperativa aninhada em uma instrução condicional. Certifique-se de que o terminador de escopo esteja emparelhado com a instrução para a qual foi destinado. No exemplo a seguir, o terminador de escopo será emparelhado com a segunda instrução READ, embora o programador pretenda que seja emparelhado com a primeira.

READ FILE1
  AT END
    MOVE A TO B
    READ FILE2
END-READ

Para garantir que o terminador de escopo explícito esteja emparelhado com a instrução pretendida, o exemplo anterior pode ser recodificado dessa maneira.

READ FILE1
  AT END
    MOVE A TO B
    READ FILE2
    END-READ
END-READ