【COBOL学習|初心者向け】COBOLのEVALUATE文を使いこなす!ネストを避けて「読みやすいコード」を書くコツ

1. 導入:なぜEVALUATEのネストを避けるべきなのか?

COBOLのEVALUATE文は、IF文を繰り返すよりもスッキリと条件分岐が書ける便利な構文です。しかし、EVALUATEの中にさらにEVALUATEを入れる「ネスト(入れ子)」を多用すると、どこで分岐が始まり、どこで終わっているのかが非常に分かりにくくなります。これは、保守の際にバグを埋め込む最大の原因の一つです。本稿では、ネストを避け、フラットで読みやすいコードを書くためのテクニックを解説します。

2. 基礎知識:EVALUATE文の仕組みと「ALSO句」

EVALUATE文は、単一の変数だけでなく、複数の条件を組み合わせて判定することが可能です。ここで重要になるのがALSO句です。これを使うと、複数の変数を同時に判定できるため、わざわざネストしなくても、一つのEVALUATE文で複雑な条件を表現できるようになります。

3. 実装/解決策:フラットな構造への書き換え

ネストを避けるコツは、判定したい条件を「AND」の組み合わせとして捉え、ALSO句に並べることです。これにより、プログラムの構造が「階段状」から「表形式」に変わり、誰が見ても条件の一覧がひと目で理解できるようになります。

4. サンプルプログラム:ネストなしのスマートな記述例

以下のコードは、会員ランクと購入金額に応じて割引率を判定する例です。ネストさせるのではなく、ALSO句を使用して条件を統合しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. EVALUATE-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-RANK PIC X(01). > ‘A’:ゴールド, ‘B’:シルバー
01 WS-AMOUNT PIC 9(05). > 購入金額
01 WS-DISCOUNT PIC 9(03). > 割引率

PROCEDURE DIVISION.
> ランクと金額を同時に判定する
EVALUATE WS-RANK ALSO TRUE
WHEN ‘A’ ALSO (WS-AMOUNT >= 10000)
MOVE 20 TO WS-DISCOUNT
WHEN ‘A’ ALSO (WS-AMOUNT < 10000) MOVE 10 TO WS-DISCOUNT WHEN 'B' ALSO (WS-AMOUNT >= 5000)
MOVE 5 TO WS-DISCOUNT
WHEN OTHER
MOVE 0 TO WS-DISCOUNT
END-EVALUATE.

DISPLAY “割引率: ” WS-DISCOUNT “%”.
STOP RUN.

5. 応用・注意点:現場で役立つアドバイス

現場で最も注意すべきはWHEN OTHER句の扱いです。ネストを解消してフラットに記述すると、条件漏れが発生しやすくなります。常に「想定外のパターン」を網羅するWHEN OTHER句を記述する癖をつけてください。また、条件が多すぎる場合は、EVALUATEに頼らず、判定ロジックを独立したサブルーチン(CALLプログラム)に切り出すことも検討しましょう。美しいコードは、適度な「分割」から生まれます。

コメント

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