🧩今日の学び
・COBOLでは変数は自動で存在せず、DATA DIVISIONで必ず宣言してから使う必要がある
・係長の言う通り「変数は空から降ってこない」、箱は自分で作るもの
・データ構造を先に決めてから処理を書くという順番がCOBOLの設計思想である
係長)よし、ADD A TO B までは良しとしてだ、お前のその「 A 」や「 B 」ってのは、どこから出てきたんだよ?
なるお)は? 出てきたって何すか? 存在してるんだから、そこにあるんじゃないすか。
係)だから、AやBの箱が、勝手に空から降ってくるもんじゃないだろうって話をしてるんだよ。
な)え? どういうことっすか? そこに存在しているんだから、存在しているんですよね?哲学的な話してます?「我思う故に唐揚げあり」みたいな?
係)あのな…、哲学の話もしてないし、唐揚げは哲学じゃないんだよ!
な)ソクラテスだって唐揚げ食ってますって!
係)うるさいっての!
COBOLでは変数は空から降ってこない
係)いいか、その「Excelの頭」で考えると一生コンパイル通らないぞ。
COBOLはな、変数は自分で作るんだ。前回のコード、そのまま実行してみろ。
1ADD A TO B
control + Oからenterでファイルを保存。その後control + Xでエディタを抜けて、こう書いてコンパイルだ。
$ cobc -x test.cob
な)もう…なんで、MacのControlキーはこんなところにあるんすか…押しにきーっての…
test.cob:1: error: invalid indicator 'T' at column 7
1 > ADD A TO B
2 | <EOF>
test.cob:2: error: PROGRAM-ID header missing
1 | ADD A TO B
2 > <EOF>
え、なに!?
係)COBOLに「A」や「B」とはなんなのかを教えるために、DATA DIVISIONで、宣言しておく必要があるってことだ。
1DATA DIVISION. 2WORKING-STORAGE SECTION. 3 401 A PIC 9(3). 501 B PIC 9(3).
な)あーなんかありましたねー。
係)遠い目してんなよ!
ここでAとBというデータ領域(箱)を「作ります」って宣言をする必要がある。
つまり、こう書くんだったら、
1ADD A TO B
必ず事前に箱を宣言しておく必要があるってこった。
宣言してなかったら、さっきみたいにただただコンパイルエラーになるぞ。
な)そっか DIVISION とか SECTION って、やっぱりいる君なんすね…。
でも、DATA DIVISIONにいちいち上に戻って書くのめんどくさくないすか?処理の途中で宣言とかできないんす?
1PROCEDURE DIVISION. 201 A PIC 9(3). 3 MOVE 5 TO A.
これなら行けそう感が半端ないっすけど。
係)できない。コンパイルエラーだ。
な)え? 係長の顔に免じても?
係)できない。
な)係長が鬼をも殺す勢いで睨みつけても?
係)できないってんだろ!!
な)ひっ!
データは必ず先に宣言する
係)COBOLはな、「データは全部先に書く」という絶対の掟があるからな。
こういう流れに沿う必要がある。
1IDENTIFICATION DIVISION. 2ENVIRONMENT DIVISION. 3DATA DIVISION. 4 (※ここで使うデータを全部宣言する) 5 6PROCEDURE DIVISION. 7 (※ここでやっと処理を書く)
な)なんか不便…いちいち上の行に戻って見て、また下の処理見て、あっちみてー、こっちみてー、輝かしい未来を見てーとかめんどくさいっすね…
係)大丈夫だ、輝かしい未来はこないから。
な)なんてひどい!
係)分けて書く理由は説明しただろ?
な)うー
なぜDATA DIVISIONと処理を分けるのか
係)簡単に復習するとこうだ。
参考)【COBOL 読み3-11-4】DIVISIONを思い出せ!今なら理解が深まるはず
- ENVIRONMENT DIVISION(外の世界): 「この世界では、どの名前で生きるか」を示す住民票や勤務先。OS、ファイル名、環境(PCかホストか)など、外の世界との約束を書く場所。
- DATA DIVISION(内側の世界): 「その中身は何者か」を示す身体検査や設計図。変数の型(PIC)、桁数、レコードの並びといった中身の定義を書く場所。
- 環境を変えてもコード(中身)を変えたくない
つまり、どんなデータを扱うかを先に決めて、それから処理を考える(データ構造→処理の順)。 めんどくさいとかそういう問題じゃない。
……お前の机の上と真逆の整理整頓された世界だってことだ。
おむすび
な)えー俺、机の上のどこに何があるかちゃんと把握してますよー。
つまり、この机は散らかっているんじゃなくって、完璧に構造ができ上がっているんですよ。
重要なものはここにおく、飲み物はここ、マウスはここ、タブレットはここ、スマホはこことか。
係)というか、お前……なんでそんなに「書類」が積まれてるんだよ…。
な)なんででしょうね?
いつか必要になるかもしれない。やってないかもしれない。これから怒られるかもしれない。
「かもしれない運転」で、安全人生設計が信条ですから。
係)……お前、なんかヤバいクレーム案件とか隠してないよな…?
な)え…、ほ、ほら、俺はフルオープンですから!フルオーケストラですから!!
係)ちょっとその書類見せてみろ!
な)いやあああ!見ちゃだめええ!!
係長のワンポイント
COBOLでは、処理より先にデータを作る。AやBはただの記号じゃなく、DATA DIVISIONで作った「箱」だ。
宣言していない箱は、この世界には存在しない。
だから途中で思いついても、その場では作れない。
COBOLはまず設計図を書いてから動く言語だ。

コメント