【入門編】PROCEDUREブロックの開始と終了(PROCEDURE/END) – PL/Iの基本構文とデータ制御実践ガイド

メインフレームの心臓部、「PL/I」のPROCEDUREとENDを攻略しよう!

こんにちは。長年、IBMメインフレームの深淵でシステムアーキテクトとして格闘してきた者です。

「PL/I(Programming Language One)」という名前を聞いて、身構えてしまう方も多いかもしれませんね。JavaやCOBOLを経てこの世界に足を踏み入れた方にとって、PL/Iは少し古風で、ルールが厳しい職人のような言語に見えることでしょう。でも大丈夫。PL/Iは非常に論理的で、一度コツを掴めばこれほど頼りになる相棒はいません。

今回は、PL/Iプログラムの最小単位であり、すべての始まりである「PROCEDURE」と、それを締めくくる「END」という最も重要な作法について、じっくり紐解いていきましょう。

1. PROCEDUREは「プログラムの入り口」

Javaでいえば `public static void main`、COBOLでいえば `PROCEDURE DIVISION` に相当するのが、PL/Iの PROCEDUREブロック です。

PL/Iでは、プログラムの実行はこの「PROCEDURE」から始まります。特に、そのプログラムがバッチ処理の開始点となる場合は、`OPTIONS(MAIN)` という特別な魔法の言葉を添えます。「これがこのプログラムの顔ですよ、ここから動かしてください」というOSへの合図ですね。

基本のコード例

1
/ プログラムの最小構成例 /
HELLO_WORLD: PROCEDURE OPTIONS(MAIN);

/ ここに処理を記述します /
PUT SKIP LIST(‘こんにちは、PL/Iの世界へ!’);

END HELLO_WORLD;

ここで注目してほしいのが、`HELLO_WORLD:` というラベルです。これはプロシージャの名前です。この名前を `END` の後ろにも書くことで、「ここから始まって、ここで終わる」という対応関係をコンパイラに明確に伝えます。この「名前のペアリング」が、PL/Iの厳格でありながらも美しい作法なのです。

2. 「END」という名の境界線

PL/Iを触り始めの時期、最もよく遭遇するエラーが「END不足」です。

Javaなら波括弧 `{ }` でブロックを囲みますが、PL/Iにはそれがない代わりに、`PROCEDURE` で開いた扉を `END` で閉じるという明確な意志が必要です。

  • BEGIN/END: 処理のまとまりを作る
  • PROCEDURE/END: プログラムやサブルーチンの単位を作る

もし、`PROCEDURE` の数と `END` の数が合っていないと、コンパイラは冷徹にもコンパイルエラーを吐き出します。最初は面倒に感じるかもしれませんが、これは「入れ子の構造が崩れているよ」と教えてくれる親切なアラートなんです。

3. PL/Iの「データ宣言」を優しく解説

PL/Iのデータ宣言は、COBOLのように「何文字か」という定義だけでなく、メモリ上での持ち方を細かく指定できます。これが初学者を少し驚かせる部分かもしれません。

例えば、数値ひとつとってもこんな風に書きます。

1
DCL COUNTER FIXED BIN(31); / 32ビットの整数型 /
DCL AMOUNT DEC FIXED(9,2); / 9桁、小数点以下2桁の固定小数点 /

  • DCL (DECLARE): 「変数を宣言しますよ」という合図です。
  • FIXED BIN: コンピュータが計算しやすい二進数形式。
  • DEC FIXED: 人間が見やすい十進数形式(金額計算などにはこちらが必須ですね)。

「なぜこんなに種類があるの?」と思うかもしれません。それは、メインフレームが限られたリソースの中で、いかに効率よく計算し、いかに正確にデータを保持するかを最優先に設計されているからです。この「無駄のないデータ構造」こそが、数十年動き続ける基幹システムの安定感の秘密なんですよ。

4. 今日から意識してほしい「作法のコツ」

最後に、実務でトラブルを未然に防ぐためのアドバイスを一つ。

「ENDの後に、必ず対応する名前を書きましょう。」

コンパイラは、`END;` だけで許してくれることもありますが、大規模なプログラムになると、どれがどの `END` か分からなくなります。

1
MAIN_PROC: PROCEDURE OPTIONS(MAIN);
/ 処理… /

SUB_PROC: PROCEDURE;
/ サブ処理… /
END SUB_PROC; / どこを閉じたか明記する /

END MAIN_PROC; / ここで全体が終わる /

こうして名前を添えてあげるだけで、コードの可読性が劇的に上がり、修正時のミスも激減します。機械のためではなく、未来の自分自身のために記述する――これが、一流のメインフレームアーキテクトの嗜みです。

いかがでしたか?
PL/Iは少し厳格ですが、その分、書いた通りに動く「誠実な言語」です。まずは `PROCEDURE` と `END` の対応関係を意識しながら、小さなプログラムから動かしてみてください。

もし分からないことがあれば、いつでも聞いてくださいね。一緒にレガシーシステムの荒波を乗り越えていきましょう!

コメント

タイトルとURLをコピーしました