本文へスキップ
BecomeCoder

COBOLコース · 第4章 基本の命令 ― MOVE・演算・条件分岐 · レッスン22

IF文 ― 条件分岐の基本

ブラウザで完結

導入

「もし〜なら、こうする」という条件分岐は、どの言語でもプログラムの核となる機能です。COBOLの IF 文も、英語の文に近い自然な書き方をします。

説明

       01  WS-SCORE             PIC 9(3)     VALUE 75.

       PROCEDURE DIVISION.
           IF WS-SCORE >= 80
               DISPLAY "合格"
           ELSE
               DISPLAY "不合格"
           END-IF.
  • IF 条件 … 条件を評価し、真なら直後の処理を実行。
  • ELSE … 条件が偽のときの処理(省略可能)。
  • END-IF. … IF文の終わりを明示する(COBOL-85以降で使える書き方。省略するとピリオドの位置で範囲が決まってしまい、意図しない挙動を生みやすいため、常に END-IF を書くのが現代の推奨スタイルです)。

比較演算子は記号と英単語のどちらでも書けます。

記号英単語意味
=EQUAL TO等しい
<>NOT EQUAL TO等しくない
>GREATER THANより大きい
<LESS THANより小さい
>=GREATER THAN OR EQUAL TO以上
<=LESS THAN OR EQUAL TO以下

条件の組み合わせには AND / OR / NOT が使えます。

           IF WS-SCORE >= 80 AND WS-SCORE <= 100
               DISPLAY "優秀な成績です"
           END-IF.

IF は入れ子(ネスト)にもできますし、ELSE IF 相当として次のように連結もできます。

           IF WS-SCORE >= 90
               DISPLAY "S評価"
           ELSE
               IF WS-SCORE >= 70
                   DISPLAY "A評価"
               ELSE
                   DISPLAY "B評価"
               END-IF
           END-IF.

このように条件が3つ以上に増えてくると、ネストが深くなって読みにくくなります。次のレッスンで学ぶ EVALUATE 文が、こうした多分岐をすっきり整理してくれます。

試すには

レッスン18で作った88レベルの条件名(STATUS-ERROR など)を使って、IF STATUS-ERROR ... END-IF という形の分岐を書いてみましょう。数値の比較よりも意図が伝わりやすいことを実感できるはずです。

実際に動かしてみよう

下のエディタにCOBOLを書いて「実行」を押すと、学習用シミュレータが DISPLAY の出力を表示します(本物のGnuCOBOLではなく、教材の範囲を再現した軽量エンジンです)。PICTURE句の桁数・ゼロ詰め・切り捨てなどCOBOLらしい挙動もそのまま体験できます。本文の例を書き換えて動かしてみましょう(ファイル処理やCALLなど一部の機能は対象外です)。

COBOL — ブラウザ内で実行(学習用シミュレータ)

COBOLの教材サブセットを動かす学習用シミュレータを読み込みます(本物のGnuCOBOLではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。