【COBOL学習|実務向け】【COBOL現場の作法】算術演算でハマらない!演算子前後の空白ルールを徹底解説

1. 導入:なぜ演算子前後の空白が重要なのか

COBOLの現場で、特に若手エンジニアが遭遇しやすい「不可解なコンパイルエラー」。その原因の多くが、実は算術演算子まわりの「空白」の欠落です。COBOLは可読性を重視する言語ですが、同時にコンパイラの字句解析ルールが非常に厳格です。演算子の前後に空白を入れないと、コンパイラはそれを「演算子」ではなく「データ名の一部」として解釈してしまいます。この「小さなルール」を知っているだけで、無駄なデバッグ時間を大幅に削減できます。

2. 基礎知識:COBOLの字句解析とハイフンの罠

COBOLでは、変数名(データ名)に「ハイフン(-)」を使用することができます。例えば「TAX-RATE」という変数は、有効なデータ名です。
ここで「A – B」という演算を行いたいとき、もし「A-B」と書いてしまうと、コンパイラは「A-Bという名前の変数が定義されている」と判断してしまいます。つまり、演算子としてのマイナス記号を認識させるためには、演算子としての意味を確定させるための「空白」が必須となるのです。これは、プラス(+)やアスタリスク()などの他の演算子でも同様のルールが適用されます。

3. 実装/解決策:正しいコーディングスタイル

演算子前後に必ず1つ以上の空白を設けるのが鉄則です。
・誤:COMPUTE TOTAL = UNIT-PRICE QTY
・正:COMPUTE TOTAL = UNIT-PRICE QTY

また、COMPUTE文だけでなく、ADDやSUBTRACTなどの算術動詞を使用する場合も、常に演算子とオペランドの間にはスペースを意識しましょう。保守性を高めるため、演算子の周囲を均等に空けることで、コードの可視性が劇的に向上します。

4. サンプルプログラム

以下に、計算結果の精度と可読性を意識したサンプルコードを示します。コピー&ペーストして、コンパイルが通ることを確認してみてください。

IDENTIFICATION DIVISION.
PROGRAM-ID. ARITHMETIC-TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A PIC 9(05) VALUE 100.
01 WS-B PIC 9(05) VALUE 50.
01 WS-RESULT PIC 9(07).

PROCEDURE DIVISION.
MAIN-PROCEDURE.

  • 算術演算子(+ – /)の前後に必ず空白を入れること

COMPUTE WS-RESULT = WS-A + WS-B.
DISPLAY “加算結果: ” WS-RESULT.

COMPUTE WS-RESULT = WS-A – WS-B.
DISPLAY “減算結果: ” WS-RESULT.

COMPUTE WS-RESULT = WS-A WS-B.
DISPLAY “乗算結果: ” WS-RESULT.

  • 除算の場合も同様に空白を忘れずに

COMPUTE WS-RESULT = WS-A / 2.
DISPLAY “除算結果: ” WS-RESULT.

STOP RUN.

5. 応用・注意点:現場でのバグ回避

現場でよくあるミスとして「全角スペース」の混入があります。COBOLのソースは基本的に半角文字で記述するため、エディタの設定によっては全角スペースが入り込み、コンパイルエラーの原因となります。

また、複雑な計算式(例:A + B C)を書く際は、演算子の優先順位(乗除が加減より先)に頼りすぎないことが重要です。優先順位を明確にするために括弧()を活用しましょう。「(A + B) C」のように明示的に書くことで、自分以外のエンジニアにとっても「計算の意図」が伝わりやすくなります。このときも、括弧の内側や外側にも空白を入れる習慣をつけると、より美しいソースコードになります。

コメント

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