🧩今日の学び
・ADDとMOVEは「TOの右側が本命」というCOBOL界の絶対ルールを理解。
・段落名は“未来の拡張”を見据えた見出し構造であり、1行でも意味がある。
・ピリオド1つで段落と変数の世界が分かれる──COBOLの文化を知ると理解が深まる。
今日のコード
*> トータル加算
ADD N-LINE-NET TO SUM-NET
ADD N-LINE-TAX TO SUM-TAX
ADD N-LINE-GROSS TO SUM-GROSS
ADD 1 TO TOT-OK
*> 国コード(先頭2文字)抽出
DECLARE-C-UPDATE.
PERFORM UPDATE-COUNTRY-SUM.
*> 明細1行 出力(任意)
PERFORM WRITE-DETAIL-LINE.
ADD N-LINE-NET TO SUM-NET
なるお)N-LINE-NET にSUM-NETを足すってのはわかる。
わかるってだけだけど。
でも読めてる!俺読めてるよ!
係)それ逆だ。
「ADD N-LINE-NET TO SUM-NET」ってのは、“N-LINE-NETをSUM-NETに足す”
て意味だ。
つまり計算式にするとこうだ
SUM-NET = SUM-NET + N-LINE-NET
ADDとMOVE:TOの右側が本命という絶対ルール
な)そうだ、入れる順番がまだ誤解しちゃうんですけど、
ADD A TO B
とか、Bが主体ってことでいいんです?これ絶対です?
係)そうだ、Bが主体──つまり「Bに対して何をするか」って考えるのが正解だ。
これはもうCOBOL界の絶対ルールだな。
な)えーでも、AとBが並んでるから、左から右に読むと「AにBを足す」って思っちゃうんすけど。
係)そこがCOBOLのトラップゾーンだ。
英語の文法に従うと、「add A to B」=「AをBに加える」になる。
英語の“to”が指してるのは“行き先”で、つまり、Aが材料、Bが目的地ってわけだ。
な)材料と目的地?
材料と目的地ってことは、、、、
おれは卵をあの娘のもとに届ける。
メロスのごとく?セリヌンティウスは置いといて?激怒してる場合じゃないっすよ!
係)違ってねーけど、お前が思ってることとは違うわ。
逆に
MOVE A TO B
なら「AをBに動かせ」だから、Bが目的地、Aが中身。
MOVEもADDも、「TOの右側が本命(更新されるやつ)」って思っておけ。
な)なるほどー右が本命。
じゃあ俺の愛も「右に入れて」もらえれば叶うってことすね!
んで、愛の右ってなんです?
係)知るか!
段落名は目印:DECLARE-C-UPDATEの本当の役割
*> 国コード(先頭2文字)抽出
DECLARE-C-UPDATE.
PERFORM UPDATE-COUNTRY-SUM.
な)ん?PERFORM一つだけだったら、前のコードと一括りにしてもいいんじゃないんですの?
DECLARE-C-UPDATE
わざわざここだけの宣言しなくても。目立ちたがりですか?
係)見た目だけで判断するなよ。
いいか、ここは“目立ちたがり”じゃなくて“整理上の区切り”だ。
な)整理上?領収書の仕分け的な?A4のクリアファイルとかで?
係)まぁ近い。COBOLはな、段落(Paragraph)を見出し代わりに使う文化がある。
だから DECLARE-C-UPDATE. ってのは「ここから国別サマリ関連の処理を始めますよ」っていう目印みたいなもんだ。
な)えー、でも PERFORM 1行しかないですよ?
だったら直接 PERFORM UPDATE-COUNTRY-SUM. だけでいいじゃないっすか。
なんなら一行で終わる恋みたいにスッキリするのに。
係)お前の恋はだいたい一行も続かねぇけどな。
な)…うっさい(小声)
係)いいか。ここは「今後拡張するかもしれない場所」なんだよ。
たとえば、国コードを抜くだけじゃなくて「コードを正規化する」とか「国名を参照する」処理をあとで足したくなったら、この DECLARE-C-UPDATE の中にどんどん増やせばいいだろ?
な)あー、未来への投資ってやつすね!
もっと食べときますね!
係)どういうことだよ…
段落名と変数名の違い:ピリオド一つで世界が変わる
*> 明細1行 出力(任意)
PERFORM WRITE-DETAIL-LINE.
な)WRITE-DETAIL-LINEを実行するって感じっすね。
なんかややこしいんですけど、段落名(ラベル)でしたっけ?これと変数の見た目の違いってあるんです?
係)確かに COBOL は 段落名(Paragraph Name) と 変数名(Data Name) の見た目が似てて、混乱しやすいな。
違いはな、書く場所とドット(.)の有無で見分けるんだ。
まず段落名は 手続き部(PROCEDURE DIVISION) に書く
で、最後にピリオド(.)を付ける
ドット一個で意味が変わるわけだ。
な)あれ?ピリオドなんすか、ドットなんすか?
係)COBOLの世界では、正式には「ピリオド (period)」って呼ぶのが正解だ。
な)えードットじゃないんですかー、なるおドットコムとかどうですか?
係)常に404だろうなって、いいんだよそんなことは。
日本語では「ドット」でも通じるし、みんなそう言うけどな。
でも英語のCOBOL仕様書や教科書では「ピリオドで段落を終わらせる」って言い方が正式。
おむすび
な)んー部屋着はスェット、パーティは短パンみたいな感じっすかね。
係)お前を人前につれていけねーな…
まぁ、どっちで言っても通じるが、会議で「ドットが〜」とか言うと、COBOL爺たちに「ピリオドだ!」ってツッコまれるから気をつけろ。
な)何すかその、柿の種ばっかり食べてたらピーナツ残すな!って言われる感じ…
係)一切わからんわ。
係長のワンポイント
ADD も MOVE も「TO の右側が本命(更新されるほう)」だ。
ADD N-LINE-NET TO SUM-NET は「SUM-NET = SUM-NET + N-LINE-NET」の意味になる。
英語の “add A to B” は「A を B に足す」で、B が“行き先・目的地”だと覚えろ。
DECLARE-C-UPDATE. みたいな段落名は「ここから国別サマリ処理ですよ」という見出しラベルだ。
PROCEDURE DIVISION にあってピリオドで終わる名前は“段落”、それ以外はだいたいデータ名と思っておけ。

コメント