導入:なぜピリオド一つでバグが生まれるのか
COBOLの現場で、新人エンジニアが最も頭を悩ませるのが「ピリオド(.)」の打ちどころです。COBOLにおいてピリオドは単なる句読点ではありません。プログラムの論理スコープを決定づける、極めて重要な「区切り」です。ここを誤ると、意図しない条件分岐やループの暴走を引き起こします。今回は、プログラムの静的構造を支える「段落(Paragraph)の終端」について、ベテランの視点で解説します。
基礎知識:文と段落の関係
COBOLのプログラムは、大きく「段落」という単位で構成されます。段落は名前(段落名)で始まり、次の段落名が現れるまで、あるいはプログラムの終わりまで続きます。
段落の中には、複数の「文(Sentence)」を記述できます。ここで重要なのは、文の終わりを定義するのがピリオドであるという点です。ピリオドを打つと、そこまでの命令が一つの文として完結します。
実装・解決策:論理スコープを意識した記述
よくあるミスは、IF文やPERFORM文の途中で不用意にピリオドを打ってしまうケースです。COBOLでは、ピリオドを見つけると「そこまでの制御構文は終了した」とコンパイラが判断します。
複数の命令を一つの段落に書く際は、最後の命令のみにピリオドを打ち、途中の命令はピリオドで区切らないのが鉄則です。これにより、意図した範囲で論理的に処理を完結させることができます。
サンプルプログラム:正しい段落構造の例
以下のコードは、段落内で複数の命令を正しく記述する例です。
CALC-PARA.
- ADD命令とMOVE命令を一つの文として扱います
- 途中にピリオドを打たないことで、一連の処理として繋げます
ADD 1 TO A
MOVE A TO B
- ここで初めてピリオドを打ち、段落の文を完結させます
.
NEXT-PARA.
- 次の段落はここから始まります
DISPLAY “計算完了”.
応用・注意点:現場で役立つ教訓
現場の保守で最も恐ろしいのは、「隠れたピリオド」です。例えば、IF文の中にピリオドが混じっていると、その後のELSE句が「どのIFに対するものか」という解釈が曖昧になり、予期せぬ挙動を生むことがあります。
また、最近のCOBOL(COBOL85以降など)では、END-IFやEND-PERFORMといった「スコープ終了記号」を使うことが推奨されています。これらを使えば、ピリオドに頼りすぎない堅牢なコードを書くことが可能です。
「ピリオドはここにあるべきか?」と迷ったら、一度「END-」系の終了記号で書き直せないか検討してみてください。それが、バグのない保守性の高いプログラムへの第一歩です。

コメント