🧩今日の学び
・COBOLは必ずPROGRAM-IDなどの基本構造を書かないとコンパイルできない
・係長の言う通り、コンパイルエラーは壊れているのではなくコンパイラとの会話である
・コンパイルが成功しても、DISPLAYなどの命令を書かなければプログラムは何も表示しない
初コンパイル、いきなりエラーの洗礼
なるお)だったら、これで行けるってわけっすね!フン!(カタカタ…ターン!)
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(3).
01 B PIC 9(3).
PROCEDURE DIVISION.
ADD A TO B.
んで、コンパイルっと ……なにこれ…?
test.cob:1: note: free format detected
1 > DATA DIVISION.
2 | WORKING-STORAGE SECTION.
3 |
test.cob:1: error: PROGRAM-ID header missing
1 > DATA DIVISION.
2 | WORKING-STORAGE SECTION.
3 |
test.cob:8: error: syntax error, unexpected Identifier, expecting SECTION or .
6 |
7 | PROCEDURE DIVISION.
8 > ADD A TO B.
9 |
test.cob:8: note: unknown statement ' ADD'
係長)ほら見ろ。
まず上の PROGRAM-ID header missing は、「PROGRAM-IDが無いぞ」って怒られてるんだよ。
な)え…
係)COBOLは必ず一番上に IDENTIFICATION DIVISION. (身分証明)が必要だ。それがないって話だよ。
な)え…?
係)つまり、コンパイラから「このプログラムの名前はなんだ。名乗りもせずに処理させようとしてんのか」って詰められてるんだよ。
な)で…?
係)今回はTESTって名前にするとして、一番上にこれを書かないとならんな。
IDENTIFICATION DIVISION. PROGRAM-ID. TEST.
な)これは必須すか?
係)必須だ。
な)裏口入学は?
係)ねーよ!そもそもお前にそんな金ねーだろ!
な)いやいや、あるかも知んないっすよ!昨日買った宝くじ当たってて、明日会社に退職代行がくるかもしれないっすよ!
係)そうか。だったら、もう会うこともないな。じゃあな。
な)引き止めてー!!
係)いいから、四の五の言わずにそう書けって話だよ!
な)あい…
で、もう一つのエラーのほうは?
全角スペースでプログラムは壊れる
係)unknown statement ' ADD' これ、お前が単純にやらかしただけだ。
ADDの前に「全角スペース」が入ってる。
コンパイラから「全角の空白+ADDなんていう知らない命令は無い。出直してこい」って言われてるわけだな。
な)もっと優しく教えてよ…って、ほんとだ、めっちゃ全角スペースだった。
以前「半角と全角の」って話しただろ?お前が未亡人を出現させてたときだ
※参考
【COBOL 読み2-11-1】PERFORM THRUの全角に隠された罠〜愛と恋の違いと未亡人
な)あー係長が下心満々で未亡人に近づいて優しく接したときですね。
係)俺じゃなくて全角がだろ!違う!紛らわしい言い方すんな!そこはどうでもいいんだよ!
いいから、直してみろ!
な)あい…
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(3).
01 B PIC 9(3).
PROCEDURE DIVISION.
ADD A TO B.
ってことっすね…。で、コンパイルして…と。
test.cob:1: note: free format detected
1 > IDENTIFICATION DIVISION.
2 | PROGRAM-ID. TEST.
3 |
なんじゃこりゃ… なにが間違いなのかまったくわからんちん…
コンパイル成功。でも何も起きない
係)間違ってないから、なんも言われてないだけだ。コンパイル成功だ。
な)へ? だって note: free format detected とか言ってるから…
係)それは「フリーフォーマット(自由な書き方)で書かれてるのを検知した」ってコンパイラが独り言を言ってるだけだ。
COBOLは間違ってたら、人格否定されるぐらいまで非難(エラー)されるから安心しろ。
な)コボハラ!?
係)で、実行してみろ。
な)あい…
…あれ、画面になんも表示されないんすけど…?COBOLに呆れられたとか…?
係)お前がぴっちり七三分けとか馬鹿にするからだろ。
な)デジタルにも感情が生まれた!?
プログラムは「見せろ」と言わないと何も見せない
係)いいか、お前は A と B という箱を用意して、「計算しろ(ADD)」としか命令してない。箱には何も初期値を入れてないだろ?
な)あー
係)だから、Bの中身は0(やゴミ)が入って「000」になって足し算されただけだ。
そしてお前は「画面に表示しろ」っていう命令も書いてないだろ?
だから裏で計算(0 + 0)して、誰にも見せずにプラグラムが終わってるってわけだ。
な)あー
係)画面に表示する命令あっただろ。 DISPLAY だ。
な)あい…
えーとDISPLAYでA?B?どっちを表示すれば合計みえるだったかしらん。
AをBに入れるだから、Bかな。
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(3).
01 B PIC 9(3).
PROCEDURE DIVISION.
ADD A TO B.
DISPLAY B.
000
あ、「000」って出た!!
係)というわけだ。
な)うー、たかが足し算ひとつ画面に出すだけで、長い道のりすぎ…
係)あと、最後は STOP RUN. を書いて、プログラムをちゃんと止めろ。
な)あい…
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(3).
01 B PIC 9(3).
PROCEDURE DIVISION.
ADD A TO B.
DISPLAY B.
STOP RUN.
おむすび
な)むー、難しすぎないです?書いたら、なんでこんなにややこしいのー。
係)いやー、さっきまでの威勢はどこへやらだな。
エラーにボコボコにされてしおらしくなってるお前を見れるのは新鮮でいいわ。
なんか楽しくなってきたな!
な)ほんとゼウスSっすね…
係)あん?
な)全知全能のS。
係)どんなSなんだよ!
係長のワンポイント
コンパイルエラーは「壊れている」のではなく、コンパイラからの会話だ。
COBOLは間違いをかなり具体的に教えてくれる。
まずは 上から順に読む、それだけで大半は解決する。
そしてコンパイルが通っても、表示命令を書かなければ何も起きない。
動かないプログラムの多くは、間違いではなく“命令不足”だ。

コメント