1. 導入:なぜPERFORM VARYINGが重要なのか
COBOLでプログラミングをしていると、決まった回数だけ処理を繰り返したり、テーブル(配列)の中身を順番にチェックしたりする場面が必ず訪れます。そんな時、個別にカウンタを初期化して、加算して、条件を判定して…と記述すると、コードが冗長になり、ミスも起きやすくなります。
今回解説する「PERFORM VARYING」句は、これらの一連の動作をたった1行で完結させる、ベテランも多用する非常に強力な構造化制御構文です。コードを読みやすく、そして効率的にするために必須のテクニックです。
2. 基礎知識:PERFORM VARYINGの仕組み
PERFORM VARYINGは、以下の3つの要素を自動的に管理してくれます。
・初期化:カウンタ変数を何から始めるか。
・増分:1回繰り返すごとにいくつ増やすか。
・条件判定:いつループを終了させるか。
例えば、「1から10まで数える」という処理も、この構文を使えば記述ミスを防ぎつつ、意図が明確なプログラムを作成できます。
3. 実装/解決策:構文の構成
基本の構文は以下の通りです。
PERFORM [手続き名] VARYING [カウンタ変数] FROM [初期値] BY [増分] UNTIL [終了条件]
・FROM:カウンタの開始値を指定します。
・BY:1ループごとに加算する値を指定します(省略すると1になります)。
・UNTIL:この条件が「真(TRUE)」になった時点でループを終了します。
4. サンプルプログラム:テーブル操作の実践
以下のコードは、10個の要素を持つテーブルの各要素を順に読み込み、値を表示する実用的な例です。そのままコピーしてコンパイルと実行を試してみてください。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-LOOP.
DATA DIVISION.
WORKING-STORAGE SECTION.
- 10個の要素を持つテーブルを定義
01 WS-TABLE.
05 WS-ITEM PIC X(10) OCCURS 10 TIMES.
01 WS-I PIC 9(02).
PROCEDURE DIVISION.
- テーブルに値を設定(テスト用)
MOVE “DATA-01” TO WS-ITEM(1)
MOVE “DATA-02” TO WS-ITEM(2)
MOVE “DATA-03” TO WS-ITEM(3)
- PERFORM VARYINGによるループ処理
- WS-Iを1から開始し、1ずつ増やして、10を超えるまで繰り返す
PERFORM 100-PRINT-PARA VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 10.
STOP RUN.
100-PRINT-PARA.
- テーブルのインデックスとしてWS-Iを使用
DISPLAY “要素番号: ” WS-I ” 値: ” WS-ITEM(WS-I).
5. 応用・注意点:現場でのアドバイス
現場でよくある失敗として「無限ループ」があります。UNTILで指定した条件が、ループ内で更新されるカウンタ変数によって最終的に満たされるか、必ず確認してください。
また、BY句の増分に負の値を指定することで、カウントダウン処理も可能です。例えば、テーブルの最後から先頭に向かって処理を行いたい場合などに重宝します。
最初は複雑に見えるかもしれませんが、この構文を使いこなすことで、あなたのコードはより「COBOLらしい」堅牢で読みやすいものに変わるはずです。ぜひ日々の開発に取り入れてみてください。

コメント