【COBOL 読み3-11-3】コードの関係性確認しましょ

🧩今日の学び
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文は、世界を説明しない。
世界はすべて、ENVIRONMENTDATA DIVISIONで決まっている。
SORTはその前提を一切疑わず、勝手にREADしてWRITEする。
だから②を読まずに①を追うと、必ず理解が破綻する。
COBOLは処理を見る前に、定義を信じ切れ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする