【COBOL学習|豆知識】COBOL流の「continue」!EXIT PERFORM CYCLEでループをスマートに制御しよう

導入

皆さんはCOBOLでループ処理を書く際、特定の条件の時だけ「この後の処理は飛ばして、次の回へ進みたい」と思ったことはありませんか?そんな時に役立つのが、EXIT PERFORM CYCLE 文です。他のプログラミング言語で言うところの「continue」に相当します。これを使えば、ネストの深いIF文を避けて、可読性の高いスッキリとしたコードを書くことができます。

基礎知識

COBOLのPERFORM文は強力ですが、条件分岐が複雑になると、どうしてもIF文の中にIF文が入り込み、いわゆる「スパゲッティコード」になりがちです。
EXIT PERFORM CYCLE 文は、実行されると現在の反復処理の残りを即座に中断し、PERFORMの制御機構(VARYINGで指定した変数の加算など)へ直接ジャンプします。これにより、処理すべきでないデータを効率よくスキップすることが可能になります。

実装/解決策

使い方は非常にシンプルです。PERFORMループの中で、スキップしたい条件のIF文の中に記述するだけです。
注意点として、この命令はあくまで「現在のループの先頭(条件判定部)に戻る」ためのものです。ループ自体を完全に終了させたい場合は「EXIT PERFORM」を使う必要がありますので、混同しないようにしましょう。

サンプルプログラム

以下のコードは、1から10までの数値の中で、偶数だけを処理して奇数をスキップする例です。

000100 PROCEDURE DIVISION.
000200 PERFORM VARYING WS-IDX FROM 1 BY 1 UNTIL WS-IDX > 10
000300 奇数の場合は処理をスキップして次のループへ
000400 IF FUNCTION MOD(WS-IDX, 2) NOT = 0
000500 EXIT PERFORM CYCLE
000600 END-IF
000700 偶数のみがここに到達する
000800 DISPLAY “処理対象の偶数: ” WS-IDX
000900 END-PERFORM.
001000 GOBACK.

応用・注意点

現場の保守において、「どこでループが戻っているのか」がパッと見て分からないコードは避けるべきです。EXIT PERFORM CYCLE を使う際は、必ずその条件が何であるかをコメントで明記してください。
また、古いコンパイラや、特定のベンダーの規格ではサポートされていない場合もあります。移行案件などでは、事前に使用環境の仕様書を確認することをお勧めします。この命令を使いこなせば、複雑な条件分岐も驚くほどシンプルに整理できますよ。ぜひ現場のコードで活用してみてください。

コメント

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