COBOLのif文の使い方を完全ガイド!初心者でもわかる条件分岐とネスト
生徒
「COBOLで条件によって分岐する方法ってありますか?」
先生
「COBOLでは、if文を使って、簡単に条件分岐することができます。」
生徒
「具体的にはどのように使うんですか?」
先生
「それでは、基本的な使い方を見ていきましょう!」
1. if文とは?
COBOLのif文は、プログラムの中で条件に応じて処理を切り替えるための命令です。たとえば、「年齢が20歳以上なら『成人』と表示する」など、条件分岐を行いたいときに使います。条件分岐とは、「もし〜ならば○○する、そうでなければ××する」といった判断をプログラムにさせることです。
以下は、年齢が20歳以上かどうかを判断する基本的なif文の例です。
IF AGE >= 20 THEN
DISPLAY "あなたは成人です。"
END-IF
このように、COBOLのif文では、IFとTHENを使って条件を書き、最後にEND-IFで終わります。中括弧{}などは使いません。
2. ネスト(入れ子)されたif文の使い方
ネストとは、「if文の中にさらにif文を書く」ことです。たとえば、「年齢が20歳以上で、かつ国籍が日本の場合だけ特定の処理をする」といった複数の条件を判断する場面で使います。
以下の例は、年齢が20歳以上で、さらに国籍コードが「JP」だった場合に「日本の成人です」と表示するネストされたif文です。
IF AGE >= 20 THEN
IF NATIONALITY = "JP" THEN
DISPLAY "日本の成人です。"
END-IF
END-IF
このように、2つのif文を重ねて書くことで、細かい条件を段階的にチェックできます。プログラムは上から順番に読みます。まず年齢が20歳以上かをチェックし、その条件が正しければ次に国籍をチェックします。
3. ELSEを使って条件に合わなかった場合の処理を書く
IF文では、条件に合わなかった場合の処理も書くことができます。それがELSEです。「もし〜なら〜する、そうでなければ〜する」という形です。
以下の例では、年齢が20歳以上なら「成人」と表示し、そうでなければ「未成年」と表示します。
IF AGE >= 20 THEN
DISPLAY "あなたは成人です。"
ELSE
DISPLAY "あなたは未成年です。"
END-IF
ELSEを使うと、1つの条件に対して2通りの分岐ができます。どちらか一方の処理が必ず実行される形になるので、分かりやすくなります。
4. 複雑な条件を1つのIF文にまとめる方法
ネストするのではなく、複数の条件を一つの行で書くこともできます。そのときはAND(〜かつ)やOR(〜または)を使います。
以下の例は、「年齢が20歳以上、かつ国籍が日本」であれば「日本の成人です」と表示します。
IF AGE >= 20 AND NATIONALITY = "JP" THEN
DISPLAY "日本の成人です。"
END-IF
逆に、「年齢が20歳以上または国籍が日本」どちらか一方でも当てはまるなら表示したい場合は、ORを使います。
IF AGE >= 20 OR NATIONALITY = "JP" THEN
DISPLAY "条件のいずれかに当てはまります。"
END-IF
ANDやORを使うときは、条件が正しく組み合わされているかを意識しましょう。カッコ()で囲むことで優先順位も制御できます。
5. 実行結果の例
以下は、年齢が18歳で、国籍が「JP」の場合の出力例です。上記の複雑な条件に合致しないため、表示されません。
年齢が25歳で、国籍が「JP」なら以下のように表示されます。
日本の成人です。
6. ネストと複雑な条件はどちらが良いの?
ネストされたif文と、複数の条件を1行で書く方法は、どちらにもメリットがあります。ネストは段階的に判断したいときに分かりやすく、1行で条件をまとめるとコードがすっきりします。ただし、条件が増えてくると、1行で書いた方が読みづらくなることもあるので注意が必要です。
初心者の方には、まずはネストを使って段階的に判断する方法をおすすめします。慣れてきたらANDやORを使ってまとめるスタイルにチャレンジしてみましょう。
7. よくあるミスと注意点
- IF文の最後には必ず
END-IFを忘れずに。 - 条件式の比較には「=」を使い、「==」や「!=」などは使えません。
- 文字列の比較は必ずダブルクォート(")で囲む必要があります。
- ネストが深くなるとコードが読みづらくなるので、適切に整理しましょう。
まとめ
COBOLのif文は、とても素直な書き方ができる条件分岐です。年齢や点数、コードや入力された値によって表示内容や処理を切り替えることができるため、実務でも必ず使用する基本構文です。今回の記事では、単純なIFだけでなく、ELSEを使った分岐、さらにネストした条件分岐、ANDやORを用いた複数条件の組み合わせまで丁寧に確認しました。特に、ネストと複数条件は、実際のCOBOLでも頻繁に登場するため、初心者の段階で慣れておくと後々スムーズにコードを読めるようになります。
まず、IFとTHENで始まり、END-IFで終えるという形は、どんな複雑な条件でも変わりません。IF文が増えても、終わりを忘れずに記述すれば問題なく動きます。慣れないうちは、IFを書いたら同時にEND-IFを書く癖をつけておくとミスが減ります。特にネストすると、END-IFがどこに対応するか見失いやすいので、インデントを丁寧に揃えておくと読みやすくなります。
ELSEが使えると、「もし○○ならA、そうでなければB」というように、分岐が明確になります。ただ「条件に当てはまったときだけ処理したい」という場面より、「当てはまらなかったときも別のメッセージを出したい」という場面の方が多いので、ELSEは自然と使い慣れていきます。たとえば、入力された点数が60点以上なら合格、それ以外なら不合格、というような処理は、どの分野のシステムでも登場します。
さらに、ネストされたIF文は、一段ずつ確認しながら判断させたいときにとても便利です。「年齢が20歳以上」で「国籍が日本」のように条件が増えていく場面はたくさんあります。段階的に読みやすくなるため、初心者には理解しやすい構造です。一方で、条件を一行にまとめるANDやORはスッキリした記述ができるという利点もありますが、条件が増えすぎると読みづらさが増していくので、状況に合わせて書き分ける柔軟さが大切になります。
IF文が正しく動いているかどうかを確認するには、表示内容を分かりやすくしながらテストすることも重要です。DISPLAYを使って確認しながら条件を調整していくと、思った通りの動作をさせられるようになります。特に、国籍コードや数値などが入力によって変わる処理は、テストケースを複数用意すると理解が深まります。
以下は、今回学んだ内容をまとめたサンプルです。年齢と点数を使ってメッセージを変える処理をひとつに組み立てています。
IDENTIFICATION DIVISION.
PROGRAM-ID. IF-SAMPLE-END.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 AGE PIC 99 VALUE 18.
01 SCORE PIC 99 VALUE 75.
PROCEDURE DIVISION.
* 年齢の判定
IF AGE >= 20 THEN
DISPLAY "あなたは成人です。"
ELSE
DISPLAY "あなたは未成年です。"
END-IF
* 点数の判定
IF SCORE >= 80 THEN
DISPLAY "とても良い成績ですね。"
ELSE IF SCORE >= 60 THEN
DISPLAY "合格おめでとうございます。"
ELSE
DISPLAY "次はもっと頑張りましょう。"
END-IF
STOP RUN.
このサンプルでは、IF、ELSE、そしてELSE IFのように条件を重ねて使っています。実際のCOBOLでは、さらに国コードや顧客情報などを組み合わせて複雑な処理をしていきますが、基本は今回の考え方と変わりません。ひとつひとつの条件を丁寧に積み重ねることが、正しいロジックへ繋がります。
IF文は一見単純ですが、業務システムの大部分を支えていると言っても過言ではありません。銀行の残高判定、保険料計算、給与処理、顧客情報管理など、条件によって処理が変わるシーンはどこにでも存在しています。そう考えると、IF文を正確に理解することは、COBOLを扱う上での大きな基礎力になります。
また、条件が複雑になると、コードの読みやすさが非常に重要になります。インデントを揃えたり、コメントを入れたり、処理を小さく分けたりすることで、見やすさは格段に変わります。自分以外の人が読む場面や、未来の自分が読み返す場面を意識しながら書くと、自然と整理されたCOBOLになります。
IF文を覚えたあとは、EVALUATE文というより大きな条件分岐も学ぶことになりますが、まずはIFでしっかり基礎を固めることが安心につながります。今回の内容を何度か実際に入力して動かしてみると、理解がより深まります。
生徒
「IF文って、思ったより書き方が単純なんですね。でもネストやAND、ORを使うと、だんだん頭がこんがらがりそうです…」
先生
「最初はゆっくり慣れれば大丈夫ですよ。ネストは段階で考えられるので初心者向き、ANDとORは慣れてくると便利、という感覚で使い分けると良いですね。」
生徒
「ELSEがあると、どっちにしても必ず結果が決まるのが分かりやすかったです。自分のプログラムでも使えそうです!」
先生
「その調子です。IF文はCOBOLの基礎なので、今回の書き方を覚えておけば他の処理にも応用できますよ。」
生徒
「ネストが多いときは、インデントをそろえると読みやすいのも覚えておきます!」
先生
「良い気づきですね。読みやすいコードは、それだけで価値があります。これからも条件分岐をいろいろ試してみましょう。」