COBOL入門 Mission3-6
処 理 内 容 |
PROGRAM-ID |
難易度 |
言語 |
ドライバと機能の分割記述 |
LST006 |
1 |
COBOL |
|
1:処理図
|
2:処理概要
命令がダラダラと長く書かれると読み辛くなりますので、プログラムを分割して記述してみよう
LST005 ⇒ LST006 1本のプログラムの処理(open〜closeまで)を分割する
分割する場合も色々な考え方があります
分割するのと、しないもの、どちらが見易いでしょうか?
※図は手違いでLST050に…
|
|
3:ファイル名称 |
I-O |
外部ファイル名 |
編成 |
KP/KL |
RL/BF |
access |
(1)ソースプログラム |
in |
c:\cobol\??????.cbl |
seq |
/ |
72/1 |
順 |
|
4:出力メッセージ
☆『ドライバ』と『機能モジュール』☆
プログラムは『ドライバ』と『機能モジュール』をはっきり区別して記述した方が分かり易い! |
|
******** ( LST005 を分割記述 ) ********
IDENTIFICATION DIVISION.
PROGRAM-ID. LST006.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT F1 ASSIGN TO f1idt STATUS 状態
ACCESS MODE IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD F1.
01 F1R PIC X(72).
WORKING-STORAGE SECTION.
01 状態 PIC X(02).
01 確認 PIC X(01).
01 行数 PIC 9(02) VALUE 0.
01 F1IDT.
03 PIC X(09) VALUE "c:\cobol\".
03 名前 PIC X(06).
03 PIC X(04) VALUE ".cbl".
PROCEDURE DIVISION.
********** 制御モジュール **********
PERFORM UNTIL 名前 = "END006"
DISPLAY "プログラム名 6桁 タイプイン 終了-->END006"
ACCEPT 名前
IF 名前 = "END006"
THEN DISPLAY "<<< LST006 - 終了 >>>"
ELSE PERFORM 表示処理 THRU 表示出口
END-IF
END-PERFORM
STOP RUN.
********** 機能モジュール ***********
表示処理. OPEN INPUT F1
INITIALIZE 行数
PERFORM UNTIL 状態 NOT = "00"
READ F1
END DISPLAY "!!! 表示 - 終了 !!!"
NOT END DISPLAY F1R
ADD 1 TO 行数
IF 行数 = 20
THEN DISPLAY "NEXT ? TYPE-IN Y"
ACCEPT 確認 MOVE 0 TO 行数
ELSE CONTINUE
END-IF
END-READ
END-PERFORM
CLOSE F1
表示出口. EXIT.
* [OPEN 出来ない時も CLOSE命令が実行される]
どうでしょうか?LST005と比較してみるとよくわかりますが、プログラムの制御部分と機能部分を完全に分離した方が明らかに見た目にもスマートになりますね。
良いプログラムとは、バグがなく・誰が見ても理解でき・仕様変更が容易である、という三点に尽きます。
処理の制御部分と機能部分を完全に独立させることにより、それぞれの役割を明確に出来ます。こういうことをキッチリやることが一番大事ですし、結果的に一番早くプログラムが組めます。