これまで見てきた簡単な例題では、手続き部に複数のCOBOL文が書かれており、それらが書かれた順番に実行されていました。
一般には手続き部は複数の節の並びとして構成され、各節は複数の段落の並びとして構成されます。以下の例を見てください。
PROCEDURE DIVISION. 初期化処理 SECTION. 領域初期化. ………………… データベース接続. ………………… 本体処理 SECTION. レコード読み取り. ………………… 売り上げ計算. ………………… 終了処理 SECTION. データベース切断. ………………… 領域開放. …………………
予約語「SECTION」は節の見出しを定義するものです。手続き部で7カラムから11カラムの間に書き出される利用者語は節名または段落名とみなされ、SECTIONを伴うものが節、SECTIONのないものが段落となります。
上の例で手続き部は以下のように3つの節に分割され、各節が2つの段落に分割されています。
手続き部 | 節:初期化処理 | 段落:領域初期化 |
---|---|---|
段落:データベース接続 | ||
節:本体処理 | 段落:レコード読み取り | |
段落:売り上げ計算 | ||
節:終了処理 | 段落:データベース切断 | |
段落:領域開放 | ||
節や段落は基本的に書かれた順番に上から実行されますが例外は、GO TO文とPERFORM文です。
GO TO文は構造化プログラミングの潮流の中で悪者扱いされ、利用が減ってきていますが、1985年規格で構造化構文が登場するまではCOBOLでは一般的でした。GO TO文を実行すると処理はオペランドで指定された節または段落に分岐します。
PERFORM文を使用すると、節または段落を1つの手続きとして呼び出すことができます。すなわちオペランドに指定された節または段落に分岐した後、その節・段落を最後まで実行するとPERFORM文の次の文に処理が戻るのです。
これを使用して1つのCOBOLプログラムを、1つのメイン処理と複数の内部関数の形に構成することができます。しかし、PERFORM文は手続きに引数を渡すことができません。また、節や段落はそれ自身にローカルなデータ項目を持つことができず、COBOLのデータ部に記述されたデータ項目はすべて節・段落に共通に参照されます。
このほか、STOP RUN文は実行単位を終了させ、EXIT PROGRAM文はサブルーチンから呼び出し元へ復帰しますので、その次の文は実行されません。
個々の段落の中では以下のような構造化構文を使用して制御構造を記述することができます。
COBOL | Java | Visual Basic | |
---|---|---|---|
条件判定 | IF 条件式 THEN 文 ELSE 文 END-IF. |
if (式) 文 else 文 ; |
If 条件式 Then 文 Else 文 End If |
多分岐判断 | EVALUATE 式 WHEN 値 文 WHEN 値 文 OTHER 文 END-EVALUATE. |
switch (式) { case 値: 文 ; case 値: 文 ; default: 文 ; } |
Select Case 式 Case 値 文 Case 値 文 Case Else 文 End Select |
条件ループ | PERFORM UNTIL 条件式 文 END-PERFORM. |
while(! 式) { 文 ; }【注1】 |
Do Until 条件式 文 Loop |
制御変数ループ | PERFORM VARYING 項目名 FROM 1 BY 1 UNTIL 項目名 > 5 文 END-PERFORM. |
for(i = 1; i <= 5; i++) { 文 : } |
For I=1 to 5 Step 1 文 Next |
【注1】COBOLのUNTILは条件が成立しない間ループすることを意味するのでwhileとは逆になる |
ここまでCOBOLの最も基本的な言語機能について見てきましたが、ここで述べていない機能で重要なものとしては以下があります。
MOVE文でデータ項目間の転記が行えます。標準桁寄せ規則と呼ばれるルールがあり、非数字項目は左寄せに転記し、余りの部分は空白文字で補われます。数字項目は送り側の数学的な値が受け側のPICTURE/USAGEの形式に従って格納され、上位・下位のあふれたけたは切り落とされます。
非数字項目と数字項目の間の転記規則も細かに規定されています。
データ項目の宣言にOCCURS句を使用して配列を定義することができます。COBOLではこれを「表」と呼びます。手続き部で表項目にカッコで添え字付けをして要素を参照できます。添え字付けはJavaやC#流の0オリジンではなく、Pascal流の1オリジンです。
COBOLでいうファイルは同じ集団項目のデータが外部記憶上に複数件格納されているものとみなされます。個々の集団項目データをレコードと呼びます。これをOPENして、READ/WRITEなどの命令でレコード単位にアクセスすることができます。
先頭のレコードから順番に処理する順編成ファイルと、レコード中のキーとなる項目の値を利用して乱アクセスする索引編成ファイルがあります。
1つまたは複数のファイルをレコード内のキー項目に着目してソートマージするSORT文、MERGE文があります。
別のコンパイル単位中にあるCOBOLプログラムをサブルーチンとして呼び出すCALL文があります。引数を受け渡しする方法や、外部変数を共有する方法も用意されています。
以上、非常に駆け足でCOBOLの文法を解説しました。興味をもたれた方は、ぜひCOBOLプログラミングを試してみてください。次回はこのようなCOBOL言語が最近のテクノロジーの中でどのように利用されているのかを概観します。
Copyright © ITmedia, Inc. All Rights Reserved.