はじめに
COBOLの無駄知識で楽しむシリーズです。レガシーシステムの保守やマイグレーションで苦悩されている方々を少しでも和ませる事が出来れば幸いです。
予約語が多いぞ
いろいろなプログラム言語の予約語の数をまとめたものがあります。例えば、ここ。
https://github.com/e3b0c442/keywords
大体100個以下です。予約語が少なくシンプルな構文で構成される言語の方が学びやすいと思います。
さて、我らがCOBOL。規格の時期によって違いますが400〜500個あります。すごいですね。
なぜそんなに多いのか
COBOLは処理をそのまま文章で記述するような書き方をします。
「もし合計値がゼロならばアイテムAに0を転記しろ」という英文がそのままCOBOLのプログラムになる感じです。
英文なので同じ予約語でも単数形と複数形があったりします。例えば予約語ZEROと並んで、予約語ZEROSやZEROESがあります。意味は同じです(苦笑)。だから予約語の数が増えます。
IF SUMVAL EQUAL ZERO THEN
とか
MOVE ALL ZEROS TO ITEM-A
などと書けますね。
文(statement)の数も多いぞ
C言語にはfor文とかif文とかいくつかの文があります。C言語とかJavaだと10〜20個です。
はい、COBOLは文の種類も多いです。ISO/IEC 1989:2023の規格書のindexは公開されていますが、14.9 Statementsを見ると51個あります。計算するのにCOMPUTE文というのがあり、それだけで十分なのに足し算用の文とか引き算用の文が別にあったりします。
文が増えるとその文に必要な予約語が追加になったりします。こんな調子なので、どうしても予約語が多くなります。
少し話題がそれますが、以下の記事でthenという予約語の追加を避ける議論があったという話は興味深かったです。
https://qiita.com/h4cker_j/items/c50d93fa88608ef7a871
最後に
予約語や文の数が多いとダメなのか、など結論はありません。各プログラム言語にはそれぞれの思想や用途があるでしょう。でもCOBOLは最近のプログラム言語とは違う思想に沿っているな、とは思います。
普通の人には馴染みが薄いけど綺麗に体系立ったプログラム言語の文法に人間が合わせるのか、人間が書く文章にプログラム言語が合わせているのか、の違いでしょうか。