🧩今日の学び
・ENVIRONMENTは「どこにあるか」、DATAは「何者か」を決めるために分離されている
・FDは人が責任を持って触る領域、SDはSORT専用で人が触ってはいけない領域
・環境と中身を分けた設計こそが、COBOLが長く現場で生き残った理由
係長)もういいか?
なるお)そうやって圧かけないでくださいよ!もう!その顔で圧かけるからいっつも怖がられるんすよ!誰も話しかけてこないんすよ!
もっと優しく、ソフトに、カインドリーに、My Girl的にお願いしますよ!
係)どういう接し方だよ…
な)良いんですよ!細かいことは!
係)おまえが細かく言い出したんだろ!
で、なんだってんだ?
な)まだわかんないとこあるって話ですよ!
係)だったらそう言えよ!
な)もっとウェルカム雰囲気出してくださいよ。もっと笑顔で、もっとニヒルに。
って良いんですよ!係長の顔のことはどうでも!
係)だったら顔のこと持ち出すなよ!
な)水掛け論ですね…残念です。
係)どこにも水掛けの要素ねーからな!お前の一方的な断罪からな!
な)えっとですね、FDとかSDって書いてますけど、なんかよくわかんないすけど…
係)それを言うのになんで人の顔を悪く言う必要性があったんだよ!
ったく、だったら、この前に示したコードを読んでみろ。
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).
ENVIRONMENTとDATAは「外」と「中」を分けるためにある
な)いやそうじゃなくって、そもそもENVIRONMENT DIVISIONとDATA DIVISIONにファイルの関係を分けて書くのかがわかんないって話っす…。
係)…あーそういうことか。そこが分からんまま来てたのか。
な)なんとなく、設定するというか定義するとというか、そんな場所なんだなってのはわかるんすけど、今回みたいになんで分けてんのかとかがまったくわかんないっす…。
係)たしかに、DIVISIONとか、お前が何もわかってないときの話だったな。天才すぎるとかぬかしてたときの話だもんな。なぁ?
な)なんか恥ずかしいんですけど…
係)お前にも恥ずかしいなんて感情あったんだな!意外な一面だな!
な)うっさい…
係)くくく。まとめるとこういうことだ。
ENVIRONMENT DIVISIONは「この世界では、どの名前で生きるか」DATA DIVISIONは「その中身は何者か」
ふふふ。
な)笑いすぎっすよ!
係)まだ楽しませてもらうからな ニヤニヤ
な)それニヤハラっすからね!
係)なんだよニヤハラって!だったら、お前は腹ハラだな!
な)…デブって言ってます…?
環境を変えてもコードを変えない、それがCOBOLの思想
係)そんで、もう少し具体的に言うとこうなる。
ENVIRONMENT DIVISION
INPUT-FILEという名前のやつは実際には"input.csv"って場所にいるぞ
住民票・勤務先・所属みたいなもんで、
- OS
- ファイル名
- 環境(PCかホストか)
といった、外の世界との約束を書く場所だ。
DATA DIVISION
INPUT-FILEってやつの中身はITEM-IDが3文字で、ITEM-NAMEが10文字だ。
つまりは、身体検査・設計図のようなもんで、
- レコード構造
- 型
- 桁数
- 並び
といった、中身の定義を書く場所だ。
なぜ分けるのかというとだな…
理由① 環境を変えてもコードを変えたくない
今日はASSIGN TO "input.csv".
明日はASSIGN TO INPUTDD.
といったときでもDATA DIVISIONは一切変えなくて済む。
理由② 中身が同じなら、置き場所はどうでもいい
- CSV
- テープ
- ディスク
- JCLのDD名
データの形が同じなら、処理は同じ。
ここがCOBOLの思想であって、50年生き残った理由だ。
FDとSDは「人が触る 、人が触るな」の違い
FDとSDの違い、ここで整理するぞ
FD(File Description)
「人間が読む・書くファイル」
READWRITEOPENCLOSE
全部 人間(プログラマ)が操作する。
SD(Sort Description)
「SORT専用、立ち入り禁止区域」
READしないWRITEしないOPENもしない
SORT文だけを触る。
なぜSORT-FILEだけ別枠なのかというと、SORTは「途中経過を誰にも見せない」処理だからだ。
- 並べ替え途中のデータ
- 一時ファイル
- ゴミみたいな中間状態
人が触ると壊れる。だからSDを使うってわけだ。
おむすび
全体を一気に見るとこうだ。
ENVIRONMENT DIVISION:名前と置き場所(外の世界)
DATA DIVISION:中身と形(内側の世界)
PROCEDURE DIVISION:動かし方(振る舞い)
わかったか天才。
な)ほんと性格も悪いっすよね。
係)顔も悪いって言いたいのかよ。
な)そんなことじゃないっすよー。
係長の将来を考えると悲しくなってくるんすよ…この子ほんとにこんなんで世の中渡っていけるのかしら、と心配に…。
係)なんで親目線になってんだよ!
係長のワンポイント
ENVIRONMENTは「どこにあるか」を決める場所だ。DATAは「それが何者か」を決める場所だ。
この2つを分けたから、環境が変わっても処理は生き残る。FDとSDの違いも、「人が責任を持つか、触るなか」の線引きにすぎない。
COBOLは古い言語じゃない──責任分界が最初から設計された言語だ

コメント