🧩今日の学び
・FDやSDは名前ではなく、役割を固定するための予約語として文法に組み込まれている
・INPUT-FILEなどは人が付けた名前で、消せるかどうかが予約語判定の近道になる
・COBOLは「名前は自由、役割は不自由」という思想で事故を未然に防いでいる
なるお)SDとFDは予約語なんすか?
係長)ん? そうだな、FDもSDもCOBOLの予約語だ。
だから、勝手に名前を変えたり、省略したりはできないぞ。
な)…そうなんすね…ふむむ…
係)ん…?
んーもう少し細かく説明するとこうなるぞ。
FDとSDは「名前っぽいけど名前じゃない」
FD(File Description)
FD INPUT-FILE.
- 予約語
FILE SECTION専用- 「このファイルは人間が
READ/WRITEします」という宣言
SD(Sort Description)
SD SORT-FILE.
- 予約語
FILE SECTION専用- 「このファイルは
SORT専用で、人は触りません」という宣言
役割を文法で縛る、それがCOBOLの設計思想
ここがCOBOLらしいところなんだが、なんで別の予約語なのかというと、ファイルの「役割」を文法レベルで固定したかったからだ。
FDなのにSORTでしか使わないSDなのにREADしちゃう
こういう事故を文法で起こさせないためだ。
もし間違えたらどうなるか。
例えば、SDをREADしようとした場合。
READ SORT-FILE.
コンパイルエラー or 実行時エラーとなる。
COBOLはな、「それ、立場的にやっちゃダメだろ」ってところをかなり厳しく見てくる。
まとめるぞ。
FD/SDは 予約語FILE SECTIONでしか使えないFDは人が触るファイルSDはSORT専用の立入禁止区域- 文法で役割を縛るのがCOBOL
な)むー
係)なんなんだよ、さっきから。
な)いや、てか、そういう説明が今までなかったから、何が予約語で、どれが係長命名語なんか、わからなかったんですけど…。
係)…あー。そ、それはすまん、俺の進め方が悪かったな。
な)天才だからついていけてんですよ!
係)わかったわかった。一回、ちゃんと整理しておくか。
COBOLの言葉は3種類に分かれている
予約語(言語が決めた言葉)
- COBOLが意味を持ってる
- 勝手に名前を変えられない
- 文法そのもの
FD
SD
SELECT
READ
WRITE
SORT
PERFORM
係)これは俺が決めたんじゃないからな。
ユーザー定義名(コードを書く人が決めた言葉)
- ファイル名
- 変数名
- レコード名
- 段落名
INPUT-FILE
ITEM-ID
SORT-ITEM-FILE
SEARCH-ALL-ITEM
係)これは全部、勝手に付けた名前だ。
な)あー「LOVE」とか言ってましたよね。
係)なんでそれは覚えてるんだよ…
コメント・ノリ(なるおゾーン)
- 説明用
- 感情
係)ここは文法とは無関係。好き勝手書けるお前が得意なところだ。
な)好き勝手に書いたら怒るくせに…
係)お前の好き勝手は洒落にならないんだよ!
でだ。
FD / SD はこう書くだろ。
FD INPUT-FILE.
SD SORT-FILE.
この見た目が
FD + 名前
SD + 名前
だから「FDやSDも名前っぽく見える」んだ。
でも実際はこうだ。
FD(予約語) + INPUT-FILE(お前が付けた名前)
SD(予約語) + SORT-FILE(お前が付けた名前)
じゃあ、どう見分けるかって話だ。
それ無しで意味が通るか
超シンプルな判定法として、「それ無しでCOBOLが意味を理解できるかどうか」ということだ。
例えば、
FDを消す → ファイル定義じゃなくなるSDを消す →SORT専用じゃなくなるINPUT-FILEを消す → 名前が無いだけITEM-IDを消す → 別名つければOK
消せないやつが予約語となる。
簡単にまとめると、
FD/SDは予約語INPUT-FILE/SORT-FILEは人間が付けた名前- COBOLは「役割」を予約語で縛る
- 名前は自由、役割は自由じゃない
これで大丈夫…だろ?
おむすび
係)って、なんで今頃聞いてきたんだよ?初歩の初歩と言えるところなのに。
な)だって、最初のときは何がなんだかわからないし、どっかで一回聞いたことあったけど、どう聞けばいいかわからなかったので、よくわかんなかったしで。
今ならなんとなくちゃんとした言葉で聞けるかなって。
係)…お前も成長してんだな…
な)あれ?感動してます?
係)あぁ…やっぱり全然天才じゃなかったんだなって。
な)え!?
係長のワンポイント
FDやSDは名前じゃない、役割を宣言するための予約語だ。INPUT-FILEやSORT-FILEが名前に見えるのは、その後ろに立っているからにすぎない。
COBOLは「自由に名付けていい」と同時に、「勝手に振る舞うな」と言ってくる。
だから役割は予約語で縛り、名前だけを人間に任せている。
消せない言葉が予約語──そこに言語の意思がある

コメント