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のプログラムがより理解しやすくなります。
まとめ
COBOLのPERFORM WITH TEST AFTERは、繰り返し処理の中でも特に「必ず1回は処理を実行したい」という場面でとても役に立つ仕組みです。条件を先に確認するのではなく、まず処理を動かしてから条件式を判定するため、入力画面の初回処理や、初期値を必ず画面に表示したいときなど、多くの業務システムで自然に使われています。同じPERFORM文でも、WITH TEST BEFOREを使う場合とは挙動が異なるため、文章だけでは違いが分かりにくいこともあります。しかし、実際にプログラムを書いて動かしてみるとその違いがとても分かりやすく、COBOLのプログラムがどのように動いているか、処理の流れがはっきりと理解できます。
また、後判定ループの特徴として、条件式の書き方によっては繰り返し回数が増えすぎてしまったり、終了条件を満たさずに無限ループになってしまうことがあります。このような状況を避けるためには、ループの中で変数が正しく更新されているか、条件式が適切か、想定した値に変化しているかを確認することがとても大切です。業務用のCOBOLプログラムでは、数値の集計、一覧データの表示、ユーザー入力待ちの処理など、毎日のように繰り返し処理が登場します。そのため、PERFORM文を正確に使いこなせることは、COBOLを扱うエンジニアにとって必要不可欠なスキルです。
実際の現場では、PERFORMを単体で使うだけでなく、段落を複数つなげたり、ファイル処理の途中で後判定ループを挟んだり、集計結果を計算しながら表示したりと、さまざまな書き方で利用されています。特に、必ず初回の表示が必要なレポート出力、バッチ処理のログ表示、データ読み込みの1件目の処理など、最初の1回を必ず通過させたい処理は数多く存在します。PERFORM WITH TEST AFTERを理解しておけば、こうした処理を安全に、読みやすく、誤りなく記述できます。
■もう少し複雑なサンプル
ここでは、合計値を計算しながら画面に表示する例を確認してみます。
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST-AFTER-PLUS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TOTAL PIC 9(3) VALUE 0.
01 INPUT-NUM PIC 9(2) VALUE 1.
PROCEDURE DIVISION.
PERFORM CALCULATION
WITH TEST AFTER
UNTIL INPUT-NUM > 10
STOP RUN.
CALCULATION.
ADD INPUT-NUM TO TOTAL
DISPLAY "数字:" INPUT-NUM " 合計:" TOTAL
ADD 1 TO INPUT-NUM.
上記の例では、必ず1回は合計計算が行われます。さらに、処理のたびに数字が増えていき、結果が表示されるため、後判定ループがどのように動いているのかがはっきり確認できます。もし、ここでWITH TEST BEFOREを使っていた場合、初期値によっては処理が1回も動かないこともあり、表示すらされないケースもあります。
初心者のうちは、動くコードを書くだけで精一杯かもしれません。しかし、このWITH TEST AFTERを理解しておくと、COBOLのループ処理の考え方がぐっと広がり、より複雑な業務ロジックやファイル処理にも対応できるようになります。大切なのは、「必ず1回通る」「条件は後で判定する」という考え方を忘れず、プログラムが自然な流れで読める形に整えることです。保守性や拡張性を考えたプログラムは、誰が読んでも迷わず理解でき、将来的な変更にも柔軟に対応できます。
COBOLの基礎を支えるPERFORMは、ただの繰り返し命令ではなく、業務システムの根幹を支える大切な構文です。画面入出力、帳票処理、バッチ処理、オンライン処理、どんな場面でも安定して動作するため、数十年にわたって愛用されてきました。PERFORM WITH TEST AFTERは、その中でも特に扱いやすく、自然な動きのループとしてとても多くの現場で使われています。今回学んだ内容を使って、自分でサンプルを作ったり、練習問題に挑戦したりすると、もっと理解が深まります。
生徒
「PERFORM WITH TEST AFTERは、必ず1回は処理が実行されるっていうのがポイントなんですよね?」
先生
「その通りです。後判定の特徴はそこにあります。先に処理が1回行われるので、初期処理や初回表示が必要な場面でとても便利なんです。」
生徒
「もし条件を満たしていなくても、とりあえず1回は実行されるんですね。先に判定するWITH TEST BEFOREとは違いますね。」
先生
「ええ、そこが大きな違いです。状況に応じて使い分けることで、無駄のない綺麗なプログラムが書けますよ。」
生徒
「実務で使う場面もたくさんありそうです。これからの練習で意識してみます!」
先生
「いい心がけですね。PERFORM文を理解できれば、COBOLのプログラムはどんどん書きやすくなりますよ。」