1. なぜPERFORM UNTILが重要なのか
COBOLで開発をしていると、特定の条件が満たされるまで同じ処理を繰り返したい場面に必ず遭遇します。例えば、「ファイルの中身を最後まで読み込む」といった処理です。かつてはGO TO文を使って無理やり処理を戻す手法もありましたが、これではプログラムの流れが複雑になり、バグの温床になります。PERFORM UNTILを使うことで、プログラムが上から下へ流れる「構造化プログラミング」が実現でき、可読性と保守性が格段に向上します。
2. 基礎知識:条件反復の仕組み
PERFORM UNTILは、指定した条件が「真(TRUE)」になるまで、指定されたパラグラフ(処理の塊)を繰り返し実行する構文です。
ここで重要なのは「判定のタイミング」です。基本的には「前判定(処理をする前に条件を確認する)」として動作します。つまり、最初から条件が満たされていれば、一度も処理が実行されないという特徴があります。これは、ファイルが空だった場合にエラーを起こさないための安全な仕組みとして非常に重要です。
3. 実装と解決策
PERFORM UNTILを使用する際は、必ず「終了条件となるフラグ」や「カウンタ」をループの前後で正しく制御することがポイントです。ループ内で終了条件を更新し忘れると、永遠に処理が終わらない「無限ループ」に陥ります。必ず、ループの内部処理で終了条件(フラグの書き換えなど)が更新されるように設計しましょう。
4. サンプルプログラム
以下は、カウンタを使って5回処理を繰り返すシンプルなサンプルです。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-LOOP.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-COUNT PIC 9(01) VALUE 0.
PROCEDURE DIVISION.
MAIN-LOGIC.
- カウンタが5になるまでループを実行する
PERFORM PROCESS-LOOP UNTIL WS-COUNT = 5.
DISPLAY “すべての処理が完了しました。”.
STOP RUN.
PROCESS-LOOP.
- 処理内容を表示
ADD 1 TO WS-COUNT.
DISPLAY “現在のカウントは:” WS-COUNT ” です。”.
5. 応用・注意点
現場でよくある失敗として、「ループ内で条件フラグを更新し忘れる」というケースがあります。特に複雑なIF文が絡む場合、どこで終了条件が満たされるかを明確にすることが大切です。また、どうしても「一度は必ず処理を実行してから判定したい」という場合は、PERFORM文にWITH TEST AFTERという句を追加することで、後判定(処理の後に条件を確認する)に変更することも可能です。用途に合わせて使い分けるのが、ベテランへの第一歩ですよ。

コメント