【COBOL学習|初心者向け】COBOL初心者が知っておくべき「文」と「句」の正しい付き合い方

1. なぜ「文」と「句」の理解が重要なのか

COBOLを学習し始めると、プログラムの後半である「Procedure Division」で、命令をどこで区切ればよいのか迷うことがよくあります。昔のCOBOLではピリオド(.)を多用していましたが、現代のプログラムでは「ピリオドの打ちすぎ」はバグの温床になります。この違いを理解することは、読みやすく保守性の高いコードを書くための第一歩です。

2. 基礎知識:文(Sentence)と句(Statement/Phrase)

COBOLにおいて、以下の2つの概念を整理しておきましょう。

ステートメント(文の一部):「MOVE」や「ADD」といった動詞で始まる、一つの命令の単位です。
文(Sentence):一つ以上のステートメントを並べ、最後に「ピリオド(.)」を打つことで完結する一連の処理です。
句(明示的範囲終了指定子):「END-IF」「END-READ」などの言葉です。これを使うことで、ピリオドを使わずに処理の終わりを明示できます。

昔のCOBOLはピリオドでしか終わりを判断できなかったため、複雑な条件分岐で「意図しない場所で処理が切れる」というバグが多発しました。現代の構造化プログラミングでは、この「句」を積極的に使うことが推奨されています。

3. 実装の考え方:ピリオドは「段落の最後」だけに置く

今の現場では「ピリオドは段落(Paragraph)の終わり以外にはなるべく書かない」という書き方が主流です。IF文の中にさらにIF文を入れるような複雑な処理でも、明示的終了指定子(END-IF)を使えば、どこまでが条件分岐なのか一目でわかります。

4. サンプルプログラム

以下のコードをコピーして、実際に動きを確認してみてください。

IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-CODE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A PIC 9 VALUE 5.
01 WS-B PIC 9 VALUE 5.
01 WS-C PIC 9 VALUE 1.
01 WS-D PIC 9 VALUE 0.

PROCEDURE DIVISION.
> 現代風の書き方:END-IFを使って範囲を明確にする
IF WS-A = WS-B THEN
MOVE WS-C TO WS-D
DISPLAY “一致しました。Dの値は: ” WS-D
END-IF. > ここでIF文が完結

> もしELSEが必要な場合も同様
IF WS-A = 0 THEN
DISPLAY “Aは0です”
ELSE
DISPLAY “Aは0ではありません”
END-IF.

STOP RUN.

5. 応用・注意点:現場で役立つアドバイス

現場で最も多いトラブルは「ピリオドの打ち忘れ」や「余計なピリオド」によるロジックの崩壊です。

注意点:
END-IFなどの句を忘れると: コンパイルエラーになるか、意図しない範囲まで条件分岐が継続してしまいます。
ピリオドの多用: 段落の途中でピリオドを打つと、そこでその文が終了してしまいます。特にIF文の途中でピリオドを打つと、それ以降の処理が条件に関係なく実行されてしまうことがあるため、注意が必要です。

基本は「ピリオドは段落の終わりだけ」と意識するだけで、プログラムの安定性は劇的に向上します。ぜひ、新しいコードを書く際は明示的範囲終了指定子を積極的に活用してください。

コメント

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