【PL/I学習|初心者向け】メインフレームの基本!PL/Iの「PROCEDURE」で処理を整理しよう

なぜPROCEDURE(手続き)が重要なのか

メインフレームでPL/Iを扱う際、全ての処理を一つの巨大なコードの中に書いてしまうと、修正や保守が非常に困難になります。PROCEDURE(PROC)を使って処理を小さな単位に分割することで、コードの可読性が向上し、バグの発生を抑えることができます。これは、現代のJavaにおけるメソッドの考え方と非常に似ており、プログラムの構造を整理する上で最も重要な概念です。

PROCEDUREの基礎知識:外部と内部

PL/IのPROCEDUREには、大きく分けて二つの種類があります。
1. 外部手続き(External Procedure):プログラムの入り口となる、独立した単位です。ロードモジュール単位で管理されます。
2. 内部手続き(Internal Procedure):他のPROCEDUREの中に入れ子状態で記述される手続きです。これがPL/Iの大きな特徴で、外側の変数をそのまま参照できるという強力なスコープ(有効範囲)を持っています。

z/OSの環境では、これらの手続きが呼び出されるたびにDSA(Dynamic Storage Area)と呼ばれるスタック領域がLE(Language Environment)によって動的に管理されています。

実装のポイント

内部手続きを多用すると、どこでどの変数が変更されたか分かりにくくなる傾向があります。他の言語へ移行する際や、保守性を高めるためには、「一つのPROCEDUREは一つの機能に徹する」ことを意識しましょう。また、引数(ARG)を適切に定義することで、データの受け渡しを明確にすることが成功の秘訣です。

サンプルプログラム:計算処理のモジュール化

以下は、メインの処理から内部手続きを呼び出し、計算を行うサンプルです。

/ メインの外部手続き /
MAIN_PROG: PROC OPTIONS(MAIN);

  DCL A FIXED BIN(31) INIT(10);
  DCL B FIXED BIN(31) INIT(20);
  DCL RESULT FIXED BIN(31);

  / 内部手続きの呼び出し /
  CALL ADD_NUM(A, B, RESULT);
  
  / 結果の表示 /
  PUT SKIP EDIT('計算結果は:', RESULT)(A, F(5));

  / 内部手続きの定義 /
  ADD_NUM: PROC(IN1, IN2, OUT);
    DCL (IN1, IN2) FIXED BIN(31); / 入力引数 /
    DCL OUT FIXED BIN(31);        / 出力引数 /
    
    OUT = IN1 + IN2;              / 加算処理 /
  END ADD_NUM;

END MAIN_PROG;

応用と注意点:モダンな開発への備え

PL/I独自の機能である「入れ子構造」は便利ですが、JavaやC#といった言語へ移行する際には注意が必要です。これらの言語には「手続きの中に手続きを置く」という概念は標準ではありません。

現場での回避策として、内部手続きを「プライベートメソッド」へ抽出する準備をしておきましょう。また、内部手続きが外側の変数を直接参照している場合、引数として変数を渡す設計(カプセル化)に書き換えておくと、将来的な言語移行が圧倒的にスムーズになります。まずは「一つのPROCの中は完結させる」ことを意識してコーディングしてみましょう。

コメント

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