ここが変だよあれが変だよ、COBOL

@ITにて。

1. 英語の表現に近い言語であること

 「MOVE INPUT-AREA TO OUTPUT-AREA」とか「ADD 1 TO INDEX-1」のような英語らしい表現による構文が採用されています。

2. 固定桁数の十進算術演算を処理できること

 明示的な十進演算が可能です。プログラマはそれぞれのデータ項目に対して、小数点上・下の十進桁数を明示的に定義することができ、これらの間での四則演算およびべき乗の計算を自由に記述できます。

3. 入出力のファイル仕様を記述できること

 事務処理の基本であるバッチ処理を容易に記述するため、入出力および突合せで使用するファイルのレコード仕様や物理仕様を読みやすく定義できます。

4. 固定形式の帳票が容易に出力できること

 帳票出力用に金額編集 (上位桁のゼロ抑止、通貨記号の浮動挿入など) を宣言的に定義できます。また、項目を固定桁に印刷するための空白詰めや右寄せ転記などが自動的に行われるよう宣言することができます。

 こうしてCOBOLの半世紀の歴史がスタートしました。

ひとつひとつぼやいてみるか。

1. 英語の表現に近い言語であること

「MOVE INPUT-AREA TO OUTPUT-AREA」や「ADD 1 TO INDEX-1」という表記がなぜよいのか、未だに分からない。
業務で使っているが、本当によく間違える。
プログラミング言語なんだから、なにも英語ちっくにかかなくてもと思うのは自分だけか!?

2. 固定桁数の十進算術演算を処理できること

固定桁数自体が悪な気がします。。
sprintfで %8d とかすれば素直に8桁になるし。。
それより、固定桁数による桁溢れのほうが悲惨。

3. 入出力のファイル仕様を記述できること

別にいまどきの言語でも実現できる。
それに、今流行のkey-valueストアを使えば、もっと楽にいろいろできそう。

4. 固定形式の帳票が容易に出力できること

これもいまどきの言語ならどれも可能。


そもそも、COBOLを書くときって毎回同じような呪文をとなえないといけない。

000100 IDENTIFICATION         DIVISION.                                         
000200 PROGRAM-ID.            【プログラム名】.                                     
000300 ENVIRONMENT            DIVISION.                                         
000400 CONFIGURATION          SECTION.                                          
000500 SOURCE-COMPUTER.       HITAC-M.                                          
000600 OBJECT-COMPUTER.       HITAC-M.                                          
000700 INPUT-OUTPUT           SECTION.                                          
000800 FILE-CONTROL.                                                            
000900   【どんなファイルを使いたいか記述】                                              
001000 DATA                   DIVISION.                                         
001100 FILE                   SECTION.                                          
001200   【ファイルの仕様やCOPY句の呼びだし】                                              
001300******************************************************************        
001400 WORKING-STORAGE        SECTION.                                          
001500   【変数の定義】
001600 PROCEDURE              DIVISION.                                         
001700   【ここでやっと処理が書ける】

処理中に変数を定義できないことがこれまたくそったれ。

いちいちWORKING-STORAGEに書かないといかん。

自分は記憶力がよくない方なので、すぐに何を定義したか忘れる。

処理はオブジェクト指向チックに書くことができない(書けるかもしれんが、知らん)ので、どうしても長くなる。

そうなると、もうひたすらスクロール。

もう爆発寸前。

この連載の流れだと、最後は「さあ皆さん、こんなすばらしい言語であるCOBOLを使いましょう。うちの製品をどうぞ!」ということになりそうだが、いっそうのこと、「さあ皆さん、Javaや.NETがどれほどすばらしい言語か分かりましたでしょうか。もうこれからはCOBOLを書かないで!」という方向に、個人的には持っていきたい。

JavaCOBOL風なフレームワークを1つ作れば、COBOLerでもすんなり入ってこれるんでは?
#そうもいかないか!?

業務で今、S2Strutsを使った画面開発をサクサクやっておりますが、来月からはCOBOLでのバッチ開発が確定。

憂鬱以外の何者でもない。