COBOLのはじめ方!条件分岐(IF…ELSE, EVALUATE)

プログラミングでは、「もし○○だったら××する、そうでなければ△△する」といったように、条件によって処理の流れを変えたい場面がたくさんあります。COBOLでは、このような条件分岐を実現するために主にIF文EVALUATE文が使われます。

このステップでは、これらの基本的な使い方と、どのような場合にどちらを使うべきかを学んでいきましょう!

1. IF文:基本的な条件分岐はおまかせ!

IF文は、最も基本的な条件分岐の方法です。指定した条件が真(True)か偽(False)かによって、実行する処理を分けます。

基本的な構文

IF文はいくつかの形式がありますが、基本的な形は次のとおりです。

IF 条件式 THEN 条件式が真(True)の場合に実行する処理...
ELSE 条件式が偽(False)の場合に実行する処理...
END-IF. 
  • IF:条件分岐の開始を示します。
  • 条件式:真か偽かを判定するための式です。(例:SCORE >= 60
  • THEN:条件式が真の場合の処理を記述する部分の開始を示します。(省略可能な場合もあります)
  • ELSE:条件式が偽の場合の処理を記述する部分の開始を示します。ELSE以降は必要なければ省略できます。
  • END-IF:IF文の終わりを明確に示すための範囲符です。COBOL’85標準で導入され、複雑なIF文でも構造を分かりやすくするために推奨されます。END-IFの代わりにピリオド(.)でIF文を終了することもできますが、特にネスト(入れ子)構造にする場合はEND-IFの使用が推奨されます。

使用例:点数による合否判定

例えば、テストの点数(SCORE)が60点以上なら「合格」、そうでなければ「不合格」と表示するプログラムは次のようになります。

IDENTIFICATION DIVISION.
PROGRAM-ID. IF-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SCORE PIC 9(3) VALUE 75.
PROCEDURE DIVISION. IF SCORE >= 60 THEN DISPLAY "点数: " SCORE " → 合格です! " ELSE DISPLAY "点数: " SCORE " → 不合格です... " END-IF. STOP RUN. 

この例では、SCOREが75なので、SCORE >= 60という条件式は真(True)となり、「合格です!」が表示されます。

条件式で使える比較演算子

IF文の条件式では、主に以下のような比較演算子が使えます。

演算子意味英語表記での書き方 (推奨)
=等しいIS EQUAL TO
>より大きいIS GREATER THAN
<より小さいIS LESS THAN
>=以上IS GREATER THAN OR EQUAL TO
<=以下IS LESS THAN OR EQUAL TO
NOT =等しくないIS NOT EQUAL TO

記号での記述も可能ですが、英語表記の方が可読性が高いため、一般的には英語表記が推奨されます。

その他の条件の種類

比較条件の他にも、以下のような条件があります。

  • 符号条件 (Sign Condition): IS POSITIVE, IS NEGATIVE, IS ZERO を使って、数値が正、負、ゼロかを判定します。
  • クラス条件 (Class Condition): IS NUMERIC, IS ALPHABETIC などを使って、データの内容が数字か、英字かなどを判定します。
  • 条件名条件 (Condition-Name Condition): データ定義部(DATA DIVISION)のレベル88で定義した条件名を使って判定します。
  • 複合条件 (Combined Condition): AND (かつ) や OR (または) を使って複数の条件を組み合わせます。(例:AGE >= 20 AND GENDER = "M"
  • 否定条件 (Negated Condition): NOT を使って条件の真偽を反転させます。(例:NOT SCORE < 60

ネスト(入れ子)IF文

IF文の中にさらにIF文を入れることも可能です。これをネストまたは入れ子と呼びます。

IF 条件式1 THEN IF 条件式2 THEN 処理A ELSE 処理B END-IF
ELSE 処理C
END-IF. 

ただし、ネストが深くなりすぎるとプログラムが複雑になり、読みにくくなる原因になります。そのような場合は、次に説明するEVALUATE文の使用を検討しましょう。

2. EVALUATE文:複数の条件分岐をスマートに!

EVALUATE文は、特定の値や条件に基づいて、複数の分岐処理を行いたい場合に非常に便利です。他のプログラミング言語におけるswitch文やcase文に似ていますが、より柔軟な条件設定が可能です。

特に、ネストしたIF文が複雑になりそうな場合に、EVALUATE文を使うとコードがすっきりと読みやすくなります。

基本的な構文

EVALUATE文の基本的な構文は以下の通りです。

EVALUATE 評価対象 WHEN 条件1 条件1に一致した場合の処理... WHEN 条件2 条件2に一致した場合の処理... WHEN 条件3 THRU 条件4 条件3から条件4の範囲に一致した場合の処理... WHEN OTHER 上記のいずれの条件にも一致しなかった場合の処理...
END-EVALUATE. 
  • EVALUATE:評価の開始を示します。評価対象には、変数名、定数、式、あるいはTRUEFALSEを指定できます。
  • WHEN:評価する条件を指定します。
  • THRU (または THROUGH):値の範囲を指定する場合に使用します。(例:WHEN 1 THRU 5
  • OTHER:どのWHEN節にも一致しなかった場合に実行される処理を指定します。省略可能です。
  • END-EVALUATE:EVALUATE文の終わりを示す範囲符です。

使用例:点数による成績評価

点数(SCORE)に応じて成績(GRADE)を付ける場合、IF文をネストさせるよりもEVALUATE文を使う方が分かりやすくなります。

IDENTIFICATION DIVISION.
PROGRAM-ID. EVALUATE-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SCORE PIC 9(3) VALUE 85.
01 GRADE PIC X(1).
PROCEDURE DIVISION. EVALUATE TRUE *> 条件式自体を評価対象にする WHEN SCORE >= 90 MOVE "A" TO GRADE WHEN SCORE >= 80 *> 90未満で80以上 MOVE "B" TO GRADE WHEN SCORE >= 70 *> 80未満で70以上 MOVE "C" TO GRADE WHEN SCORE >= 60 *> 70未満で60以上 MOVE "D" TO GRADE WHEN OTHER *> 60未満 MOVE "F" TO GRADE END-EVALUATE. DISPLAY "点数: " SCORE " → 成績: " GRADE. STOP RUN. 

この例では、EVALUATE TRUEとして、各WHEN節の条件式が真になるかどうかを評価しています。SCOREが85なので、WHEN SCORE >= 80が最初に真となり、GRADEに”B”が設定されます。一致するWHENが見つかると、それ以降のWHEN節は評価されずにEND-EVALUATEの次に処理が移ります。

EVALUATE文の様々な形式

  • 特定の値で分岐: EVALUATE 変数名 WHEN 値1 ... WHEN 値2 ... のように、変数の値そのもので分岐します。
  • 範囲で分岐: WHEN 値1 THRU 値2 で範囲を指定できます。
  • 複数の値で同じ処理: WHEN 値1 WHEN 値2 WHEN 値3 処理... のように、複数のWHENを連続して記述すると、いずれかの値に一致した場合に同じ処理を実行できます。
  • 複数の条件を評価 (ALSO): EVALUATE 条件1 ALSO 条件2 WHEN 値A ALSO 値B ... のように、ALSOを使って複数の評価対象と条件を組み合わせることも可能です。

3. IF文とEVALUATE文の使い分け

IF文とEVALUATE文はどちらも条件分岐に使えますが、状況に応じて使い分けることで、より分かりやすく保守性の高いコードを書くことができます。

  • IF文が適している場合:
    • 単純な二者択一の分岐(「Aか、それ以外か」)。
    • 少数の独立した条件を判定する場合。
  • EVALUATE文が適している場合:
    • 一つの値や条件に対して、多数の分岐がある場合(多岐分岐)。
    • ネストしたIF文が深くなり、読みにくくなる場合。
    • 条件の範囲指定 (THRU) や、複数の値で同じ処理を行いたい場合。
    • コードの見た目をすっきりとさせたい場合。

基本的には、3つ以上の分岐がある場合や、IF文のネストが複雑になりそうな場合は、EVALUATE文の使用を検討すると良いでしょう。

まとめ

今回は、COBOLにおける基本的な条件分岐であるIF文と、多岐分岐に便利なEVALUATE文について学びました。

  • IF文は基本的な条件分岐に使われ、IF 条件 THEN 処理 ELSE 処理 END-IFの形で記述します。
  • EVALUATE文は多岐分岐に適しており、EVALUATE 対象 WHEN 条件 処理 ... END-EVALUATEの形で記述します。
  • 複雑な分岐やネストが深くなる場合は、EVALUATE文を使うとコードが読みやすくなります。

これらの文を適切に使い分けることで、プログラムの流れを効果的に制御し、分かりやすいコードを作成することができます。次のステップでは、繰り返し処理について学んでいきましょう!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です