COBOL2002は、開発者に有益なCOBOL国際規格に対応した機能をサポートしています。ここでは、COBOL2002でサポートしているCOBOL国際規格の主な機能をご紹介いたします。
第5次COBOL国際規格は、2014年に制定された規格です。
TRIM関数は、引数の中の先行する空白や後続する空白を削除した文字列を返します。
TRIM関数の記述例を次に示します。
動的長基本項目(dynamic-length elementary item)は、長さが動的に変わる基本データ項目です。
DYNAMIC LENGTH句を使用して動的長基本項目を定義します。
動的長基本項目の記述例を次に示します。
第4次COBOL国際規格は、2002年に制定された規格です。
COBOL2002では、新たに翻訳指令がサポートされました。
翻訳指令を使用すると、COBOLプログラムのコンパイル(翻訳)時に、特定の動作や解釈をするようにコンパイラへ指示を与えることができます。
COBOL2002には、次のような翻訳指令が用意されています。
翻訳指令の使用例(条件翻訳)を次に示します。
翻訳指令とは、COBOLコンパイラがCOBOLソースプログラムを翻訳するときに、「»」で始まる行をコンパイラに対する指令として処理する機能です。コンパイラは、本来のCOBOLプログラムの翻訳より前に、翻訳指令行の指示に基づいてソースプログラムを処理します。
翻訳指令の主な機能としては、条件翻訳があります。条件翻訳を使用すると、記述されたCOBOL原始プログラムの一部を有効、または無効にできます。このため、「プラットフォームごとの固有な処理」や「ユーザごとにカスタマイズしたい処理」などを一つのCOBOL原始プログラム中にまとめて記述できるようになり、保守性を向上させることができます。
<条件翻訳の使用例>
条件翻訳機能の一つであるIF指令(»IF)を使用した例で説明します。
(IF指令の使用例)
» IF 翻訳変数名 IS DEFINED
(COBOLソース行A)
»ELSE
(COBOLソース行B)
»END-IF
ここで記述した「翻訳変数」とは、本来のCOBOL原始プログラム中で使用する変数ではなく、翻訳指令だけに有効となる変数です。 翻訳変数には、既定義/未定義の状態があり、DEFINE指令(»DEFINE)、-Defineコンパイラオプションのどちらかで定義します。
(DEFINE指令による翻訳変数の定義)
» DEFINE 翻訳変数名
(-Defineコンパイラオプションによる翻訳変数の定義)
-Define 翻訳変数名
上記の例では、IF指令(»IF)によって、「翻訳変数名」が既定義かどうかをDEFINED条件で確かめています。その結果、次のように翻訳対象となるCOBOLソース行が選択されます。
翻訳変数の既定義/未定義 | COBOLソース行A | COBOLソース行B |
---|---|---|
既定義 | 翻訳対象 | 翻訳対象外 |
未定義 | 翻訳対象外 | 翻訳対象 |
条件翻訳には、IF指令のほかに、多分岐を扱えるEVALUATE指令(»EVALUATE)もあります。
TYPEDEF句は、データのひな型を宣言する機能を提供します。
TYPEDEF句を使用すると、複数のデータで構成されたデータ構造を一つのデータ型として宣言できます。このように作成したデータ型を基に、データの実体を定義できます。なお、データの実体を定義するには、TYPE句を使用します。
また、SAME AS句を使用すると、すでに記述されているデータ構造と同じデータ構造を簡単に記述できます。
これらの句を使うことによって、データ定義部分を簡潔に記述できます。
COBOLが提供している組み込み関数に加えて、利用者が独自に関数を作成できます。利用者定義関数は、従来の入れ子プログラムとは異なり、IF文などの条件式や計算式の中に記述できます。このため、判定処理や計算処理をわかりやすく、簡潔にまとめることができます。
COBOL2002規格では、プログラム実行中に発生するさまざまなエラー要因が、例外名として細かく定められています。
COBOL2002では、従来の入出力エラー処理でのUSE文による宣言手続きに加え、これらの詳細な例外名を指定した例外処理を記述できます。これによって、柔軟な例外処理を実現できます。
C++やJavaと同様に、オブジェクト指向プログラミングがサポートされました。
オブジェクト指向で一般的な「継承」「ポリモルフィズム」「カプセル化」などの手法を用いることによって、COBOLアプリケーションの生産性をさらに向上できます。
従来から規定されている固定形式正書法に加えて、行番号領域や標識領域のない自由形式正書法が使用できます。 また、COBOL2002規格のその他の機能についても、以降のバージョンで順次サポートする予定です。