COBOLを全く知らない自分がCOBOLを想像してみた

自分の周りにはCOBOLを嫌う(性格にはCOBOLerを嫌う)人が多いように思う。自分はCOBOを知らないので、なぜそんなにCOBOLが嫌われているのか良く分からない。ということで、ネットで見つかる断片的な情報を元にCOBOLがどんな言語なのか想像してみた。

Wikipediaを中心にCOBOLに関する断片的な情報を集めてみると、こんな感じになった。

  • 自然言語である英語に近い記述になるようなコマンド語彙や構文
    • 全て現在形、語尾変化なし
    • ピリオド(厳密にはピリオド及びその後に続くスペース)を記述してコードの行端を示す
  • オブジェクト指向にも対応
  • カラムの位置が重要
  • 金額計算など事務処理(商用計算)の用途に広く使われている

まずは想像してみる

金額計算や事務処理ができるので、数値や文字列を扱うことが出来るはず。数値は多分整数と浮動小数だと思う。文字列はよく分からないが内部的にはUnicodeなんじゃないかな。ということで、数値や文字の表現はこんな感じ。

12,345,678,901,234,567,890
1,357,924,680.135792468
"コボル"

金額を計算しなければならないので、多分JavaのBigIntegerやBigDecimalみたいなやつになるとおもう。あと、人間が見やすいように数値の途中に桁区切りの","が入っていると思う。

多分変数という概念はあるので、変数への代入はきっとこんな感じ。

ASSIGN 1 TO A.

四則演算もあるはずで、きっとこんな感じ

ADD 2 TO B.
SUBTRACT 3 FROM C.
MULTIPLY D BY 4.
DIVIDE E BY 5.

でもこれだけだと複雑な式の計算がものすごく面倒になるので、texの数式表現も使えると思う。

ASSIGN 6.0 TO X.
ASSIGN $\exp^{X}+\exp^{-X}$ TO F.

画面に表示するときは、きっと帳簿とか領収書みたいなやつしか表示しないはずなので、宣言部分でHTMLの雛形を定義して、そこのにテンプレートエンジン的な感じで当てはめるのだと思う。あと、オブジェクト指向だから、何とかのオブジェクトの中の何とかという表現が使えるはず。Pythonの"""とかも使えるんじゃないかな。

ASSIGN """<html>
<header><title>タイトル</title></heaer>
<table><tr><td>$Y$</td><td>$Z$</td></tr></table>
</html>""" TO GAMEN AS TEMPLATE.
ASSIGN "左" TO GAMEN'S Y.
ASSIGN "右" TO GAMEN'S Z.

標準出力くらい使えるよね。

WRITE GAMEN TO STANDARD OUTPUT.

条件分岐も必要のはず。カラムの位置が重要と書いてあったので、多分Pythonみたいにインデントでブロックを分ける方式になっているんじゃないかな。インデントはタブだと視覚的に見づらいので、先頭の"-"のかずで行うことにする。使われている予約後はBASICのやつっぽい気がするので、

IF G IS 7 THEN
-ASSIGN 10 TO H.
-MULTIPLY G BY 8.
ELSE
-ASSIGN 11 TO H.
-MULTIPLY G BY 9.
-IF G IS 42 THEN
--CALCULATE $\log(X)$ AND ASSIGN TO H.

ループもあると思う。きっとネスト出来る

ASSIGN 1 TO I.
REPEAT UNTIL I IS LESS THAN 10
-ASSIGN 1 TO J.
-REPEAT UNTIL J IS LESS THAN 10
--WRITE I TO STANDARD OUTPUT.
--WRITE "×" TO STANDARD OUTPUT.
--WRITE J TO STANDARD OUTPUT.
--WRITE "=" TO STANDARD OUTPUT.
--CALCULATE $I*J$ AND ASSIGN TO K.
--WRITE K TO STANDARD OUTPUT.
--WRITE END OF LINE TO STANDARD OUTPUT.
--ADD 1 TO J.
-ADD 1 TO I.

きっとMaximaみたいに数式処理もお手のものなんじゃないかな。方程式解いたりするのとか。

ASSIGN 10.0 TO A.
ASSIGN 20.0 TO B.
ASSIGN 30.0 TO C.
SOLVE $AX^2+BX+C=0$ ABOUT X.
WRITE X TO STANDARD OUTPUT.

データベースも扱えないとまずい。多分こんな感じ?SQLとか使うのかなぁ?

DEFINE DATABASE CONNECTION AS CON WHERE ID IS "hoge" AND PASSWORD IS "fuga".
DEFINE DATABASE TABLE AS TBL WHERE TABLE NAME IS "hage" USING CON.
ASSIGN TBL'S "012345"'S "name" TO NAME.
WRITE NAME TO STANDARD OUTPUT.

多分こんな感じ。正直使いたくない。

注意

上記の架空言語はもちろん架空言語です。あまり面白くないですがエイプリルフールのネタとしてお赦しください。