COBOLのPERFORM WITH TEST AFTERの使い方を完全ガイド!初心者でもわかる繰り返し処理の基本
生徒
「COBOLで繰り返し処理を行う方法ってありますか?」
先生
「ありますよ。COBOLではPERFORM文を使って繰り返し処理ができます。」
生徒
「その中でもPERFORM WITH TEST AFTERって何ですか?」
先生
「それは“後判定ループ”という種類の繰り返し処理の方法です。まずは基本から一緒に見ていきましょう。」
1. PERFORM文とは?
COBOL(コボル)におけるPERFORM文とは、処理を繰り返すために使う命令文です。日常生活でたとえると「毎朝起きたら顔を洗う」「お米が炊けるまで何度も炊飯器を見る」といった決まりごとに近いです。
COBOLのプログラムでは、「同じ処理を何回も実行したい」ときや、「条件を満たすまで繰り返したい」ときにPERFORM文を使います。
PERFORM文にはいくつか種類がありますが、今回はPERFORM WITH TEST AFTERについて詳しく説明します。
2. PERFORM WITH TEST AFTERとは?
PERFORM WITH TEST AFTERは、「繰り返し処理を1回必ず実行してから、条件をチェックする」という意味です。これはプログラミングの世界で「後判定ループ」と呼ばれる処理方法です。
たとえば、「最低でも1回はあいさつをする。そのあと、まだ人がいるかどうかを確認して、いればまたあいさつをする」といった流れです。
この書き方を使えば、最初に1回は必ず処理を行うことが保証されます。
3. 文法と基本の構造
では、PERFORM WITH TEST AFTERの基本的な書き方を見てみましょう。
PERFORM 処理名
WITH TEST AFTER
UNTIL 条件式
END-PERFORM
この構文では、処理名は繰り返したい処理を指定し、条件式は「その処理をいつまで繰り返すか」のルールです。
WITH TEST AFTERは、UNTILで書かれた条件が「満たされるまで」繰り返します。
4. 実際のサンプルプログラム
それでは、具体的なサンプルを使って見てみましょう。ここでは「カウンターを1から5まで表示する」プログラムを作ってみます。
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST-AFTER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 COUNTER PIC 9 VALUE 1.
PROCEDURE DIVISION.
PERFORM DISPLAY-NUMBER
WITH TEST AFTER
UNTIL COUNTER > 5
STOP RUN.
DISPLAY-NUMBER.
DISPLAY "現在のカウント:" COUNTER
ADD 1 TO COUNTER.
このプログラムでは、COUNTERという変数(へんすう)を1からスタートし、5より大きくなるまでDISPLAY-NUMBERという処理を繰り返します。
■実行結果
現在のカウント:1
現在のカウント:2
現在のカウント:3
現在のカウント:4
現在のカウント:5
5. どうして「後判定」が必要なの?
なぜWITH TEST AFTERのような「後判定ループ」が必要なのでしょうか?
それは、「とにかく1回は絶対に処理を実行したい」場合があるからです。たとえば、ユーザーに最初の入力を必ず1回受け取りたい場面などでは、WITH TEST AFTERが便利です。
逆に「先に条件をチェックしてから処理したい」場合にはWITH TEST BEFOREを使います。
6. 間違いやすいポイントと注意点
PERFORM WITH TEST AFTERはとても便利な構文ですが、初心者の方がつまずきやすいポイントもいくつかあります。ここでは、よくあるミスや注意点を丁寧に紹介します。
■繰り返しが止まらない
UNTILの条件がずっと満たされないままだと、処理が無限に続いてしまいます。これはよくあるエラーで、たとえば次のように変数が増えないままだと、止まらなくなります。
PERFORM SHOW-NUMBER
WITH TEST AFTER
UNTIL COUNTER > 5
SHOW-NUMBER.
DISPLAY "カウント:" COUNTER
* ← ADD文がないのでカウンターが増えない
このように、カウンターを増やす命令(ADDなど)を忘れてしまうと、止めたくても止まらないループになります。
■初期値の設定ミス
繰り返し回数を制御する変数の初期値が正しくないと、想定よりも多くループしてしまったり、逆にすぐ終わってしまったりします。
01 COUNTER PIC 9 VALUE 6.
このように、最初から条件(COUNTER > 5)が成り立っていると、1回実行されてすぐ終了します。意図と合っているかをよく確認しましょう。
■処理が1回も実行されないと勘違い
PERFORM WITH TEST AFTERは、必ず最初に1回処理を実行するというルールになっています。たとえ最初から条件が満たされていても、1回は実行されます。
01 COUNTER PIC 9 VALUE 9.
PERFORM DO-ONCE
WITH TEST AFTER
UNTIL COUNTER > 5
DO-ONCE.
DISPLAY "実行された処理"
この場合でも、「COUNTER > 5」は最初から満たされていますが、DO-ONCEの処理は1回だけ実行されます。ここがWITH TEST BEFOREとの大きな違いです。
7. 初心者におすすめの練習問題
初心者の方には、以下のような練習がおすすめです。
- 1から10までの数字を表示するループを作る
- 「ユーザーが0を入力するまで繰り返す」入力処理を作る
- 繰り返しの中で、合計値を加算する処理を試す
繰り返し処理の考え方に慣れることで、COBOLのプログラムがより理解しやすくなります。