【COBOL学習|初心者向け】88レベルの範囲指定(THRU)を使いこなそう!重複を許容するデータ制御の極意

1. なぜ88レベルの範囲指定が重要なのか

COBOLのデータ定義において、88レベル(条件名)は「値が特定の範囲にあるか」を判定する強力な武器です。特にTHRU句を使った範囲指定は、複雑なIF文をスッキリさせるために欠かせません。しかし、初心者のうちは「範囲が重なったらエラーになるのでは?」と不安になることもあるでしょう。実は、COBOLでは範囲が重複していても文法上は許容されます。この「あえて重複させる」技術を知ることで、データに複数の属性を持たせる高度なビジネスロジックを簡潔に記述できるようになります。

2. 基礎知識:88レベルとTHRU句とは

88レベルは、データ項目に「条件名」を割り当てる機能です。例えば、売上金額が100から200の間なら「正常範囲」と見なす、といった判定をコード上で名前(条件名)として定義できます。THRU句は、その名の通り「〜から〜まで」という範囲を指定します。
ポイントは、条件名が「真(TRUE)」かどうかを判定するだけで、実際のデータ値を書き換えることはないという点です。そのため、ある値に対して複数の条件名が同時に「真」になる状況を意図的に作ることができます。

3. 実装と解決策:重複範囲の活用

例えば、ある数値が「低リスク」かつ「特定キャンペーン対象」であるといった、重なり合う条件を判定したい場合、わざわざ複雑なIF文を書く必要はありません。それぞれの条件名に88レベルで範囲を定義しておけば、判定時には単に「IF 条件名A」と書くだけで済みます。これにより、ロジックとデータ定義を分離し、保守性の高いプログラムが作成できます。

4. サンプルプログラム

以下のコードは、評価スコアに基づいて「合格」と「特待生」という二つの条件を定義した例です。スコアが85の場合、両方の条件が真となります。

IDENTIFICATION DIVISION.
PROGRAM-ID. CHECK-SCORE.

DATA DIVISION.
WORKING-STORAGE SECTION.

  • スコアの定義

01 WS-SCORE PIC 9(03).
88 IS-PASS VALUE 60 THRU 100. > 60以上は合格
88 IS-EXCELLENT VALUE 80 THRU 100. > 80以上は特待生(合格範囲と重複)

PROCEDURE DIVISION.
MOVE 85 TO WS-SCORE.

> 88レベル条件名を使った判定
IF IS-PASS
DISPLAY “合格です。”
END-IF.

IF IS-EXCELLENT
DISPLAY “特待生として認定します。”
END-IF.

STOP RUN.

5. 応用・注意点:現場での落とし穴

重複範囲を定義する際に最も注意すべき点は、「優先順位の考え方」です。
今回のように複数の条件が同時に真になる場合、どの条件を先に判定するか(あるいは両方実行するか)は、ビジネスロジックの意図を正確に反映させる必要があります。また、あまりに複雑に範囲を重ねすぎると、後からコードを読む人が「なぜここで重複させているのか」を理解できず、バグの温床になることがあります。
「この値は複数の属性を併せ持つ可能性がある」と明記するコメントを忘れずに入れ、可読性を保つことがベテランの流儀です。便利だからといって乱用せず、意味のあるグループ分けを心がけましょう。

コメント

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