プログラミングでは、「もし○○だったら××する、そうでなければ△△する」といったように、条件によって処理の流れを変えたい場面がたくさんあります。COBOLでは、このような条件分岐を実現するために主にIF文とEVALUATE文が使われます。
このステップでは、これらの基本的な使い方と、どのような場合にどちらを使うべきかを学んでいきましょう! 😊
Warning: Undefined array key “is_admin” in /home/c2261046/public_html/omomuki-tech.com/wp-content/themes/sango-theme/library/gutenberg/dist/classes/Toc.php on line 113
Warning: Undefined array key “is_category_top” in /home/c2261046/public_html/omomuki-tech.com/wp-content/themes/sango-theme/library/gutenberg/dist/classes/Toc.php on line 118
Warning: Undefined array key “is_top” in /home/c2261046/public_html/omomuki-tech.com/wp-content/themes/sango-theme/library/gutenberg/dist/classes/Toc.php on line 124
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
:評価の開始を示します。評価対象
には、変数名、定数、式、あるいはTRUE
やFALSE
を指定できます。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文はどちらも条件分岐に使えますが、状況に応じて使い分けることで、より分かりやすく保守性の高いコードを書くことができます。
基本的には、3つ以上の分岐がある場合や、IF文のネストが複雑になりそうな場合は、EVALUATE文の使用を検討すると良いでしょう。
まとめ
今回は、COBOLにおける基本的な条件分岐であるIF文と、多岐分岐に便利なEVALUATE文について学びました。
- IF文は基本的な条件分岐に使われ、
IF 条件 THEN 処理 ELSE 処理 END-IF
の形で記述します。 - EVALUATE文は多岐分岐に適しており、
EVALUATE 対象 WHEN 条件 処理 ... END-EVALUATE
の形で記述します。 - 複雑な分岐やネストが深くなる場合は、EVALUATE文を使うとコードが読みやすくなります。
これらの文を適切に使い分けることで、プログラムの流れを効果的に制御し、分かりやすいコードを作成することができます。次のステップでは、繰り返し処理について学んでいきましょう!🚀