【COBOL学習|豆知識】88レベルの「複数値指定」で実現する、スマートなステータス判定術

導入

COBOLのプログラムを保守していて、IF文の中に「OR」がずらりと並んだ条件式を見かけることはありませんか。例えば、「エラーコードが10か15か99の時は異常処理へ」といった判定です。こうした条件式は手続き部を肥大化させ、可読性を低下させる原因となります。そこで役立つのが、88レベル(条件名)の複数値指定です。これを使えば、条件判定のロジックをデータ定義側に集約でき、保守性の高いすっきりとしたコードに生まれ変わります。

基礎知識

88レベルとは、特定のデータ項目の値が「特定の条件を満たしているか」を判定するための「条件名」を定義する機能です。通常、88レベルは単一の値に対して使われることが多いですが、実は複数の値を列挙して定義することができます。これにより、プログラマは「そのデータが正常範囲内か」「特定のグループに属しているか」といった意味的な判定を、値の羅列ではなく「名前」で扱うことが可能になります。

実装/解決策

複数値を指定する場合、VALUE句の後ろにカンマで区切って値を並べるだけです。この定義を記述すると、プログラム内のIF文でその名前を参照した際、指定した値のいずれかと一致すれば「真」を返すようになります。手続き部では、個別の値やOR条件を意識する必要が一切なくなります。

サンプルプログラム

以下は、エラーコードを判定する際のコード例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. CHECK-STATUS.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-STATUS-CODE PIC X(02).
88 IS-ERROR-TYPE-A VALUE “10”, “15”, “99”.
88 IS-WARNING-TYPE VALUE “01”, “02”.

PROCEDURE DIVISION.
> テスト用にエラーコードを設定
MOVE “15” TO WS-STATUS-CODE.

> 88レベルを使うことで、IF文が非常に簡潔になる
IF IS-ERROR-TYPE-A
DISPLAY “重要エラーが発生しました。ログを確認してください。”
ELSE
DISPLAY “正常、または警告ステータスです。”
END-IF.

STOP RUN.

応用・注意点

この手法の最大の利点は、「ビジネスルールの変更」への強さです。例えば「新しくエラーコード20も追加対象にしたい」となった場合、手続き部のIF文を修正する必要はありません。データ定義部の88レベルに「, “20”」を付け加えるだけで、プログラム全体に適用されます。

注意点として、VALUE句で指定する値の型(PIC句)が一致していることを必ず確認してください。また、範囲指定(THRU)と列挙を組み合わせることも可能ですが、複雑にしすぎるとかえってデバッグが難しくなるため、あくまで「意味のあるグループ」として定義することを心がけましょう。現場のコードを美しく保つ、ベテランのテクニックとしてぜひ活用してください。

コメント

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