【COBOL学習|豆知識】COBOLの現代化!「インラインPERFORM」でコードをスマートに保つ技術

導入:なぜ今、インラインPERFORMなのか

ベテランの皆様なら、かつてはプログラムの至る所に「段落名(パラグラフ)」を定義し、GO TOやPERFORMで飛び回るコードを書いていたことでしょう。しかし、現代のCOBOL開発では「ロジックの局所性」が重要視されます。インラインPERFORMは、わざわざ別の段落を定義することなく、その場でループ処理を完結させるための強力な武器です。これを使うことで、コードの可読性が劇的に向上し、意図しない処理の飛び越しといったバグを未然に防ぐことができます。

基礎知識:インラインPERFORMの仕組み

従来のCOBOLのPERFORMは、指定した「手続き名(パラグラフ名)」へ制御を移し、処理が終わると戻ってくるという「サブルーチン形式」が基本でした。一方、インラインPERFORMは、PERFORMからEND-PERFORMの間に記述された処理を、その場ですぐに実行します。これにより、ループ処理のためだけにわざわざ独立した段落を作成する必要がなくなり、コードの構造が視覚的に追いやすくなります。

実装:シンプルに書くためのルール

インラインPERFORMを利用する際は、必ず END-PERFORM を記述して範囲を明示してください。これにより、コンパイラがどこまでがループ処理なのかを正確に把握できます。また、VARYING句やUNTIL句を組み合わせることで、従来の複雑なPERFORM文と同等の制御を、コンパクトに記述することが可能です。

サンプルプログラム:配列の読み込み処理

以下は、配列(テーブル)の中身を順に表示する実用的なサンプルコードです。そのままコピーしてコンパイルを確認してみてください。

IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-INLINE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-IDX PIC 9(02).
01 WS-TBL-AREA.
05 WS-TBL PIC X(10) OCCURS 5 TIMES.

PROCEDURE DIVISION.
> 初期値の設定
MOVE “東京” TO WS-TBL(1)
MOVE “名古屋” TO WS-TBL(2)
MOVE “大阪” TO WS-TBL(3)
MOVE “京都” TO WS-TBL(4)
MOVE “福岡” TO WS-TBL(5)

> インラインPERFORMによるループ処理
> 1から5まで順番に回す
PERFORM VARYING WS-IDX FROM 1 BY 1 UNTIL WS-IDX > 5
DISPLAY “都市名: ” WS-TBL(WS-IDX)
END-PERFORM.

STOP RUN.

応用・注意点:現場で陥りやすい罠

インラインPERFORMを使用する際、最も注意すべきは「ネスト(入れ子)の深さ」です。便利だからといってインラインPERFORMの中にさらにインラインPERFORMを何重にも重ねると、かえってコードが複雑になり、メンテナンス性が低下します。もし3重以上のネストが必要な場合は、素直に別の段落(パラグラフ)に切り出すことを検討してください。

また、古いコンパイラを使用している環境では、END-PERFORMがサポートされていない場合があります。その際は最新のコンパイラ環境への移行を検討するか、従来の手法に戻る必要があります。適材適所で使い分け、読みやすいコードを目指しましょう。

コメント

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