【入門編】SELECT文におけるWHEN条件の評価順序とOTHERWISEの役割 – PL/Iの基本構文とデータ制御実践ガイド

こんにちは。IBMメインフレームの世界へようこそ。

「PL/I? なんだか古めかしい名前だな…」と身構える必要はありません。PL/Iは、COBOLの堅実さと、C言語のような柔軟な制御構造を併せ持つ、非常に「人間味のある」言語です。

今日は、バッチ処理のロジックで避けて通れない「条件分岐の決定版」、`SELECT`文についてお話ししましょう。JavaやCOBOLの経験がある方なら、「`switch`文や`EVALUATE`文と同じでしょ?」と思われるかもしれません。ええ、基本は同じです。しかし、そこにはPL/Iならではの「優しさ」と「落とし穴」が隠れています。

1. PL/IのSELECT文:上から目線の「正直者」

PL/Iの`SELECT`文は、非常に素直です。上から順番に条件を評価し、最初に真(TRUE)となった`WHEN`節を実行して、その時点で「ハイ、終了!」と`SELECT`ブロックを脱出します。

Javaの`switch`文のように、「`break`を書き忘れて次のケースに突入しちゃった…」という悲劇は起こりません。PL/Iは、条件に合致した一つだけを律儀に実行してくれます。

基本的な書き方を見てみましょう

1
MAIN_PROC: PROCEDURE OPTIONS(MAIN);

/ 処理対象のステータスを定義 /
DCL STATUS CHAR(1);
STATUS = ‘A’;

SELECT (STATUS);
WHEN (‘A’)
PUT SKIP LIST (‘アクティブな状態です’);
WHEN (‘B’)
PUT SKIP LIST (‘保留中の状態です’);
OTHERWISE
PUT SKIP LIST (‘予期せぬステータスです!’);
END;

END MAIN_PROC;

2. OTHERWISEの役割:最後の砦

ここで初心者が一番悩むのが、`OTHERWISE`の存在です。「これ、本当に書かなきゃダメ?」という疑問ですね。

結論から言えば、「必須ではないけれど、書かないと火傷する」です。

もし`OTHERWISE`を省略し、どの`WHEN`にも合致しなかった場合、プログラムはどうなると思いますか? なんと、PL/Iは実行時エラー(ERROR条件)を発生させて、プログラムを異常終了させてしまうのです。「該当なし」を許容しない、非常にストイックな設計ですね。

実務での教訓

基幹システムの世界では、「あり得ないはずのデータ」が必ずと言っていいほど飛んできます。

  • `OTHERWISE`は、単なる「その他」ではなく、「想定外の異常系をキャッチする防波堤」だと考えてください。
  • ここでエラーログを出力したり、システム管理者への通知処理を挟んだりすることで、バッチ全体の堅牢性が劇的に変わります。

3. SELECT文の「意外な柔軟性」

PL/Iの`SELECT`文が面白いのは、`SELECT`の後に何も書かなくてもいい点です。これを「グループ化された条件」と呼びます。

1
/ SELECTの後を空にすると、各WHENで詳細な比較が可能になる /
SELECT;
WHEN (AMOUNT > 1000000)
PUT SKIP LIST (‘高額取引です’);
WHEN (AMOUNT > 0 & STATUS = ‘P’)
PUT SKIP LIST (‘ペンディング中の小口取引です’);
OTHERWISE
PUT SKIP LIST (‘通常処理または対象外’);
END;

このように、`WHEN`の中で複雑な論理演算を行うことができます。COBOLの`EVALUATE`文だと少し記述が冗長になりがちですが、PL/Iなら非常にスッキリと書けますよね。

現場のアーキテクトからのアドバイス

PL/Iを触り始めたばかりの皆さんに、一つだけコツを伝授します。

それは、「型(Attributes)への意識」です。
PL/Iは、数値型と文字型の混在に対して非常に寛容(変換を自動でやってくれる)ですが、`SELECT`文の`WHEN`比較で、意図しない型変換が起きると、思わぬバグを生むことがあります。

例えば、`DCL CODE CHAR(3);` と宣言しているのに、`WHEN (123)` のように数値で比較しようとすると、内部で暗黙の型変換が走り、パフォーマンスや結果に影響を与える可能性があります。「比較する値の型は、左辺と右辺で揃える」。これだけ守れば、PL/Iのコーディングは驚くほど快適になります。

まとめ:怖がる必要はありません

PL/Iは、古い言語ですが、その設計思想は非常にモダンです。「上から順に評価して、合致したら終わり」「ダメならOTHERWISEで安全策をとる」。このルールさえ掴めば、複雑な基幹ロジックも怖くありません。

もし現場で「コンパイラが怒ってる!」という状況になっても、それはPL/Iがあなたを正しい道へ導こうとしている証拠です。一つずつ丁寧に向き合えば、必ず味方になってくれる言語ですよ。

また何か気になることがあれば、いつでも聞きに来てくださいね。あなたのメインフレーム・ライフを応援しています!

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