導入:なぜGO TO文の扱いに慎重になるべきなのか
COBOL開発の現場において、GO TO文は最も古く、そして最も慎重に扱うべき構文の一つです。かつては処理の分岐に多用されていましたが、現在では制御の流れが複雑化し、いわゆる「スパゲッティコード」を生む最大の要因として敬遠されています。しかし、異常終了時の後処理や、特定の条件での強制脱出といった場面では、依然として有効なツールです。本稿では、GO TO文を「悪」と決めつけるのではなく、適切に管理して保守性の高いコードを書くための指針を解説します。
基礎知識:単純分岐と構造化制御構文
GO TO文は、プログラムの実行位置を強制的に指定した段落(Paragraph)や節(Section)へ移動させる「単純分岐」命令です。対義語として、IF文やEVALUATE文、PERFORM文を用いた「構造化制御構文」があります。構造化構文はプログラムの開始から終了までの一貫した流れを保証しますが、GO TO文は「制御を別の場所へ恒久的に移す」ため、元の場所に戻ることを想定していません。これが、プログラムの論理構造を追いかけにくくする原因となります。
実装:GO TO文を「出口」に限定する
GO TO文を安全に使うための鉄則は、「前方参照(プログラムの後方へのジャンプ)に限定する」ことです。後方へのジャンプは無限ループの温床となるため、原則禁止とします。基本的には「異常系処理への脱出」という目的で、プログラムの末尾に配置した終了処理ラベルへ飛ばす用途に限定しましょう。
サンプルプログラム:異常終了時の後処理での活用例
以下に、ファイル読み込みエラー等の異常系処理をGO TO文で制御する実用的なコード例を示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-GOTO.
PROCEDURE DIVISION.
> メイン処理
PERFORM 100-PROCESS-DATA.
> 正常終了時もここで終了
STOP RUN.
100-PROCESS-DATA.
> ファイル読み込み等の処理を想定
IF ERROR-CONDITION
> 異常発生時は終了処理へ強制的に飛ばす
GO TO 900-ERROR-EXIT
END-IF.
DISPLAY “処理成功”.
EXIT.
900-ERROR-EXIT.
> 異常終了時の共通処理(ログ出力やクローズ処理など)
DISPLAY “エラーが発生したため処理を中断します”.
STOP RUN.
応用・注意点:現場で陥りやすいバグと回避策
現場で最も注意すべきは、「GO TO文を飛ばした先で、さらに別のGO TO文で戻る」というような複雑な制御です。これは絶対に避けてください。また、保守担当者が後からコードを見たときに、なぜそこにジャンプしたのかが直感的に理解できるよう、ジャンプ先には必ず詳細なコメントを記載しましょう。
もし、ジャンプ先が多岐にわたるような複雑なロジックを組んでいる場合は、GO TO文ではなく、EVALUATE文やPERFORM文を用いた構造化への書き換えを検討してください。GO TO文はあくまで「最後の手段」として、非常口の鍵として扱うのが、ベテラン技術者の作法です。

コメント