COBOL程序中的数据通常都为全局性数据。因此,当程序较大,数据较多时,某些数据在程序运行中就有可能会意外丢失或被更改。如果使用子程序调用,只将某一功能要使用的数据传递给相应的子程序,则能较好的防止此类问题。
例如,下面这段程序中便用到了较多的数据,代码如下。
IDENTIFICATION DIVISION.
PROGRAM-ID TEST-PROG.
AUTHER XXX.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING STORAGE SECTION.
01 TEST-DATA.
05 TEST-DATA-1 PIC X.
05 TEST-DATA-2 PIC X.
05 TEST-DATA-3 PIC X.
……
05 TEST-DATA-N PIC X.
*
PROCEDURE DIVISION.
process TEST-DATA-1.
process TEST-DATA-2.
process TEST-DATA-3.
……
process TEST-DATA-N.
STOP RUN.
此时,在同一程序中同时处理过多的数据,容易造成部分数据意外丢失或被更改。如果将部分涉及到数据处理的功能段独立起来,编写为子程序,便可通过子程序减少此类错误发生。因为此时数据分散到各个子程序之间进行处理,增强了数据间的相对独立性。并且,对于每一个子程序而言,处理的数据相对来说也并不太多。使用子程序调用方式后的主程序代码如下。
IDENTIFICATION DIVISION.
PROGRAM-ID TEST-PROG.
AUTHER XXX.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING STORAGE SECTION.
01 TEST-DATA.
05 TEST-DATA-1 PIC X.
05 TEST-DATA-2 PIC X.
05 TEST-DATA-3 PIC X.
……
05 TEST-DATA-N PIC X.
*
PROCEDURE DIVISION.
CALL ‘SUBPGM1’ USING TEST-DATA-1
TEST-DATA-2
TEST-DATA-3.
CALL ‘SUBPGM2’ USING TEST-DATA-4
TEST-DATA-5.
……
process TEST-DATA-N.
STOP RUN.