COBOLの言語仕様
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/07/03 06:13 UTC 版)
年齢を表すageという変数の値を、一定の年数を表すyearsという変数の値の分だけ増やす手続きは、例えば普通のプログラミング言語では age = age + years;(C言語などではage += years;のように略記できる) と書かれる。COBOLでも同様にCOMPUTE文によって COMPUTE AGE = AGE + YEARS. と記述することもできるが、 ADD YEARS TO AGE.(英語でそのまま「年数を年齢に加える」) という表現も可能である。 このように、数学やアルゴリズムの知識を豊富にもっていなくても、全て現在形、語尾変化なし、など、構文上の約束事さえ覚えて、英語による理路整然とした記述ができれば、COBOLのプログラムを書けるように考えられている。つまり事務処理の手順を逐一細かく英語で書き下せば事務処理が電算化できるということである。さらにプログラムのコードそのものがプログラムの機能を説明する仕組みになっているので、そのまま読み下したときに分かりやすい。 こういった特性を、まだ人工知能、自然言語処理の研究が浅い時期に追求してCOBOLを設計したのは、意義深く、産業的にも効果があった。ただ、ソフトウェアが大規模化し相互に絡み合うように接続されてきた現代、動詞や前置詞を明示するかどうかという命令記述の次元だけでは視点が不足である。モジュール性、処理の強力さを含めて可読性と保守性を総合評価しなおすと、場面によってはまたちがう結果も生じてくる。 自然言語指向な書き方が優れているといっても、複雜な数式、関数を扱う科学技術計算分野における制御・演算には向いていない。二次方程式 A X2 + B X + C = 0 の解(の片方)を求める手続きは、COBOLでもCOMPUTE文を用いて簡潔に書こうとすれば、 COMPUTE X = (- B + (B ** 2 - 4 * A * C) ** 0.5) / (2 * A). と一文で済む。ただし、数式を極力使わない書き方にこだわれば、 MULTIPLY B BY B GIVING B-SQUARED.(BをB倍し、B-SQUAREDに代入) MULTIPLY 4 BY A GIVING FOUR-A.(Aを4倍し、FOUR-Aに代入) MULTIPLY FOUR-A BY C GIVING FOUR-A-C.(CをFOUR-A倍し、FOUR-A-Cに代入) SUBTRACT FOUR-A-C FROM B-SQUARED GIVING D.(B-SQUAREDからFOUR-A-Cを引き、Dに代入) MOVE FUNCTION SQRT(D) TO ROOT-D.(Dの正の平方根を、ROOT-Dに代入) SUBTRACT B FROM ROOT-D GIVING NUMERATOR.(ROOT-DからBを引き、NUMERATORに代入) MULTIPLY 2 BY A GIVING TWO-A.(Aを2倍し、TWO-Aに代入) DIVIDE NUMERATOR BY TWO-A GIVING X.(NUMERATORをTWO-Aで割り、Xに代入) と演算子1個あたり1文に膨れ上がって、見通しが明らかに悪くなる。もっとも、これほど複雑な式をこのように逐一書くプログラマはおよそ現代には存在しない。 COBOLでは同じ処理を書くのに、少なくとも「COMPUTE ~」と書く必要もあり、他節に述べるようにいろいろなDIVISIONの記述も必要となるなど、モダンな言語より長くなりがちである。また、パズルのように巧妙な制御機能がさほど多彩に備わっているわけではない。Eclipseなどの統合開発環境でCOBOLも使えるようになったが、Javaのような小粒度なモジュールに関してもインタフェースを明確に記述するスタイルの言語よりも、そこでされるサポートは少ない。 このようなことから、COBOLに習熟している人がモダンな言語でのプログラミング能力が高いとは限らない。それでも、世界的に蓄積され社会を動かしているCOBOL資産を保守・更新するという使命は重要である。他言語も習熟している技術者であっても、言語の欠点を多階層な共通モジュール作成やツール作成などでカバーしながら、社会基盤を支えるCOBOL関連プロジェクトで活動している。
※この「COBOLの言語仕様」の解説は、「COBOL」の解説の一部です。
「COBOLの言語仕様」を含む「COBOL」の記事については、「COBOL」の概要を参照ください。
- COBOLの言語仕様のページへのリンク