🧩今日の学び
・SORT文は処理を「書く場所」ではなく、定義済みの世界を信じて動く命令である
・ENVIRONMENT/ DATA DIVISIONで決めた前提がないと、PROCEDURE DIVISIONは存在できない
・COBOLは処理よりも「壊れない前提条件」を作る言語だと理解すると全体がつながる
係長)で、なんだって?
なるお)んとすね、この二つのコードなんすけど、
①のコード
SORT SORT-FILE
ON ASCENDING KEY ITEM-ID
USING INPUT-FILE
GIVING OUTPUT-FILE
②のコード
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUT-FILE
ASSIGN TO "input.csv".
SELECT OUTPUT-FILE
ASSIGN TO "output.csv".
SELECT SORT-FILE
ASSIGN TO SORT-WORK.
DATA DIVISION.
FILE SECTION.
FD INPUT-FILE.
01 INPUT-REC.
05 ITEM-ID PIC X(3).
05 ITEM-NAME PIC X(10).
FD OUTPUT-FILE.
01 OUTPUT-REC.
05 ITEM-ID PIC X(3).
05 ITEM-NAME PIC X(10).
SD SORT-FILE.
01 SORT-REC.
05 ITEM-ID PIC X(3).
05 ITEM-NAME PIC X(10).
関係性は、②で定義していて、①でソート処理をしてるってことでいいっす?
②は「世界のルール」、①は「その中でやる仕事」
係)わかってんじゃねーか。
お前の言う通り、②が「世界のルール」で、①が「その世界でやる仕事」
- ②:定義(契約・前提条件)
- ①:処理(実行命令)
ということだ。
SORTはな、②(定義)で決めたことを一切疑わずに動くぞ。
②(定義)の役割(ENVIRONMENT / DATA DIVISION)
ここでやってるのは全部これだ。
INPUT-FILEとは何者かOUTPUT-FILEとは何者かSORT-FILEとは何者か- それぞれのレコード構造はどうなっているか
つまり、「名前・形・責任範囲」を先に全部決めてる
な)ふむふむ。
①の役割(SORT文)
SORT SORT-FILE
ON ASCENDING KEY ITEM-ID
USING INPUT-FILE
GIVING OUTPUT-FILE
これはこう言ってるだけだ。
INPUT-FILEをSORT-FILEという作業台に載せてITEM-IDで並べてOUTPUT-FILEに渡せ
定義は一切していない。
な)ふんむふんむ。
ということは、②がなかったら①は動かないっちゅーことっすよね。
係)そうだな。というか 存在できないって言ったほうが正しいな。
③ COBOLは「定義を9割信じて動く」言語
係)SORTはな、
FILE-CONTROLを見てFD / SDを見て- レコード構造を信じて
- 勝手に
READ / WRITEする
だから、②がないと、「INPUT-FILEって誰?」「ITEM-IDって何?」「SORT-FILEって触っていいの?」と、全部わからなくなる。
だから、
- ①だけ見て、わかった気になったり
SORT文に処理を書き足そうとしたり- ②と①を別物だと思ったり
これが事故ポイントとなる。
②は「前提条件」、①は「その前提を信じた処理」
だからCOBOLでは、
- 定義が9割
- 処理は1割
って言われる。
おむすび
な)ふんむふむふむ。処理より準備の方が大事だと。
係)COBOLは、動かす言語ではなく、壊れない前提を作る言語だからな。
な)係長もCOBOLでできてるから壊れないんすね。
係)どういう意味だよ!
な)熱暴走してるときはおもしろかったすけど。
係)熱暴走じゃねーから!
係長のワンポイント
SORT文は、世界を説明しない。
世界はすべて、ENVIRONMENTとDATA DIVISIONで決まっている。SORTはその前提を一切疑わず、勝手にREADしてWRITEする。
だから②を読まずに①を追うと、必ず理解が破綻する。
COBOLは処理を見る前に、定義を信じ切れ。

コメント