【COBOL学習|実務向け】COBOLの「ピリオド」を制する者はロジックを制する―構造と制御の落とし穴

導入: なぜピリオドの配置が重要なのか

ベテランの現場において、コンパイルエラーの半分以上は、実は「ピリオドの打ち忘れ」や「余計な場所へのピリオド」が原因です。COBOLにおいてピリオド(.)は単なる文章の終わりではなく、プログラムのスコープ(論理的な範囲)を確定させる重要な記号です。特にIF文やPERFORM文と絡むと、ピリオド一つで処理の実行条件が180度変わってしまうこともあります。今回は、事故を防ぐためのピリオドの正しい扱い方を解説します。

基礎知識: ピリオドが持つ「スコープ終了」の役割

COBOLのソースは、見出し(Division/Section/Paragraph)の区切りと、文(Sentence)の終わりを示すためにピリオドを使用します。
初心者が陥りやすいのが、「文(Statement)」と「文(Sentence)」の混同です。
・文(Statement):ADDやMOVEなど、一つひとつの命令。
・文(Sentence):一つ以上のStatementをピリオドで区切った単位。
IF文の中でピリオドを打つと、その時点で「IFの論理的な範囲」が強制終了されます。この性質を理解していないと、意図しない処理の飛び越しが発生し、デバッグが困難なバグを生むことになります。

実装/解決策: 構造化プログラミングの鉄則

現代のCOBOL開発では、ピリオドの多用を避けるのがトレンドです。「END-IF」や「END-PERFORM」といった範囲終了標識(Scope Terminators)を積極的に活用しましょう。これらを使用することで、ピリオドに依存しない明確な階層構造を記述できます。

サンプルプログラム: 安全なコーディング例

以下の例は、ピリオドの誤配置によるバグを防ぐための推奨スタイルです。

IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-PERIOD.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-VAL PIC 9(01) VALUE 5.
01 WS-MSG PIC X(20).

PROCEDURE DIVISION.
> 現代的な書き方:END-IFを活用し、ピリオドは文の最後にのみ打つ
IF WS-VAL > 3
MOVE “3より大きい” TO WS-MSG
DISPLAY WS-MSG
END-IF.

> 注意:もしここにピリオドを打たず、IFの中に余計なピリオドを置くと、
> ELSEの処理が意図せず実行されたり、無視されたりするリスクがある。

STOP RUN.

応用・注意点: 現場で役立つチェックポイント

1. メンテナンス時の注意
他人が書いた古いソースを修正する際、途中に置かれたピリオドを消すと、それまでのロジック全体が崩れることがあります。「とりあえずピリオドを打ってエラーを消す」という場当たり的な修正は厳禁です。

2. COPY句の罠
COPY句で読み込むコードの末尾にピリオドがある場合、展開先で意図しない文の終了が発生することがあります。COPY句の中身は、可能な限りピリオドを付けない「部品単位」で作成するのが、プロの設計です。

3. END-系キーワードの徹底
「IF…END-IF」のように対になるキーワードがある場合は、必ずセットで記述しましょう。これにより、ピリオドの有無に依存しない可読性の高いコードが維持できます。

ピリオドはCOBOLの言語仕様の根幹です。ルールを正しく理解し、明示的な終了記号を使いこなすことで、バグを未然に防ぐ堅牢なプログラムを目指しましょう。

コメント

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