導入
これまでPROCEDURE DIVISIONの中身は上から下へ一直線に実行してきましたが、COBOLにも「処理をひとまとまりの単位に分けて、呼び出す」仕組みがあります。その単位が 段落(paragraph) で、呼び出す命令が PERFORM です。
説明
段落とは、PROCEDURE DIVISIONの中に付けた「名前付きのまとまり」です。
PROCEDURE DIVISION.
MAIN-PROCESS.
DISPLAY "処理を開始します".
PERFORM PRINT-HEADER.
PERFORM PRINT-BODY.
DISPLAY "処理を終了します".
STOP RUN.
PRINT-HEADER.
DISPLAY "===== レポート =====".
PRINT-BODY.
DISPLAY "ここに本文が入ります".
MAIN-PROCESS./PRINT-HEADER./PRINT-BODY.… それぞれが段落名です。8列目(Area A)から書き、末尾にピリオドを付けます。段落名の次の行から、次の段落名が出てくるまでが、その段落の中身になります。PERFORM PRINT-HEADER.…PRINT-HEADER段落の処理を実行し、終わったら呼び出した場所に戻ってくる。多くの言語での関数呼び出しに近い動きです。- プログラムの実行は、最初に書かれた段落(この例では
MAIN-PROCESS)から始まります。
実行結果は次のようになります。
処理を開始します
===== レポート =====
ここに本文が入ります
処理を終了します
大事な注意点があります。COBOLの段落は、他の言語の「関数」と違って 引数を取りません(引数を渡したい場合の仕組みは第9章のサブプログラムで学びます)。段落同士でデータをやり取りするときは、WORKING-STORAGE SECTIONで宣言した変数を共有します——つまりすべての段落から同じ変数が見える、という点が特徴です。
段落をいくつかまとめた SECTION(節)という、もう一段大きな単位もありますが、まずは「段落=PERFORMで呼び出せる処理のまとまり」という基本を押さえておきましょう。
試すには
MAIN-PROCESS から3つの段落(PRINT-HEADER・PRINT-BODY・PRINT-FOOTER)をPERFORMで呼び出す簡単なプログラムを書いて、呼び出した順番どおりに表示されることを確認してみましょう。