「IF文って、思ったよりクセが強いな…」と感じたことはありませんか?
COBOLを学び始めたばかりの人にとって、IF文の書き方はちょっとした“謎解き”みたいに思えるかもしれません。でも安心してください。この記事を読み終えるころには、COBOLの条件分岐がすっと頭に入るようになります。
プログラムに「もし〜だったら〜する」を実装できるIF文は、処理の分岐を作るうえで欠かせない存在です。COBOLにもIF文はありますが、他の言語と少し書き方が違います。そこでこの記事では、COBOL初心者でも理解できるように、サンプルコードを交えながら基本からしっかり解説します。
ちょっとしたルールの違いに戸惑う前に、COBOLならではの書き方に慣れておきましょう。「ああ、こう書けばいいのか」と納得できる瞬間を一緒に味わっていきます。
この記事で学べること
・COBOLのIF文の基本構文
・複数条件やネストの書き方
・ありがちなミスとその回避法
・サンプルコードで動作確認する方法
ちょっとレトロなCOBOLの世界へ、条件分岐という入り口から踏み込んでみませんか?
「COBOLのIF文」条件分岐とは何か
プログラムの中には、「ある条件を満たしたときだけ処理を変えたい」と思う場面がよく出てきます。そんなときに使うのが「条件分岐」です。
日常で例えると、「もし雨が降っていたら傘を持つ」「もしテストが80点以上ならゲームしてOK」などの判断に近い考え方です。プログラムも同じで、「もし〇〇なら〜する」という流れを作るために条件分岐を使います。
COBOLにもこの機能があります。その中心にあるのがIF文です。IF文を使うと、データの値に応じて、処理の流れを変えることができます。
例えば「在庫が0より多ければ出荷処理をする」といった判断を、プログラムに書けるようになります。つまり、IF文はプログラムに“判断力”を持たせる道具です。
ただ、COBOLのIF文には独特のルールがあるので、基本からしっかり学んでいきましょう。
「COBOLのIF文」の基本的な書き方
まずは最もシンプルな形から見てみましょう。以下のように書くのが基本です。
IF 条件式 THEN 処理 END-IF
構成要素をひとつずつ説明します。
- IF:条件をチェックする始まりのキーワード
- 条件式:どんなときに処理を実行するかを定義
- THEN:条件が成立したら、ここから先を実行
- 処理:条件が真のときに実行する内容
- END-IF:IF文の終わりをはっきりさせるために必要
END-IFは絶対に忘れちゃダメです。COBOLでは、IFの終わりを明示しないと、どこまでが条件の範囲かわかりにくくなってしまいます。
そして、COBOLではコードの見た目も大切です。IF文の中の処理は字下げ(インデント)を入れることで、読みやすくなります。
IF WS-SCORE > 80 THEN DISPLAY "合格" END-IF
こんなふうにインデントをつけておくと、「IFの中身だな」と一目で分かるようになります。
条件式の種類と比較演算子
IF文で使う条件式では、「何と何を比べるのか」がポイントです。そのときに使う記号を比較演算子と言います。
よく使う演算子と意味は以下の通りです。
- =:等しい
- <:より小さい
- >:より大きい
- <=:以下
- >=:以上
- NOT =:等しくない
使い方はとてもシンプルです。例えば、
IF WS-AGE >= 18 THEN DISPLAY "大人" END-IF
この場合、「年齢が18以上なら“大人”と表示する」という意味になります。
数値の比較だけでなく、文字の比較もできます。
IF WS-NAME = "TARO" THEN DISPLAY "名前はTAROです" END-IF
NOT =を使えば、反対の意味になります。つまり「名前がTAROではないときだけ実行する」となります。
IF WS-NAME NOT = "TARO" THEN DISPLAY "他の名前です" END-IF
まずはこのような基本的な比較から覚えていくと、プログラムに“判断”を加える力がぐっと増していきます。
「COBOLのIF文」使い方サンプルプログラム
IF文のサンプル
条件が真のときだけ処理を実行する、基本中の基本です。例えば、入力された数値が10以上かどうかを判定して、結果を表示するプログラムです。
IDENTIFICATION DIVISION. PROGRAM-ID. IF-BASIC. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUMBER PIC 9(2) VALUE 12. PROCEDURE DIVISION. IF WS-NUMBER >= 10 THEN DISPLAY "10以上の数です" END-IF STOP RUN.
このプログラムでは、WS-NUMBERが10以上かどうかを判定しています。条件が合っていれば、メッセージが表示されます。条件が合わなければ、何も表示されません。
IF ELSE文のサンプル
条件が偽の場合にも別の処理をしたい。そんなときにはELSEを使います。以下は、数値が偶数か奇数かを判定する例です。
IDENTIFICATION DIVISION. PROGRAM-ID. IF-ELSE. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUMBER PIC 9(2) VALUE 7. PROCEDURE DIVISION. IF FUNCTION MOD (WS-NUMBER, 2) = 0 DISPLAY "偶数です" ELSE DISPLAY "奇数です" END-IF STOP RUN.
MOD(モッド)は割った余りを出す演算です。余りが0なら偶数、そうでなければ奇数という判断ができます。IFの中とELSEの中で、それぞれ別の処理が動きます。
ネストされたIF文のサンプル
IF文の中にIF文を入れ込むこともできます。点数に応じて評価を表示する例で見てみましょう。
IDENTIFICATION DIVISION. PROGRAM-ID. IF-NESTED. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-SCORE PIC 9(3) VALUE 75. PROCEDURE DIVISION. IF WS-SCORE >= 80 THEN DISPLAY "評価:優" ELSE IF WS-SCORE >= 60 THEN DISPLAY "評価:良" ELSE DISPLAY "評価:可" END-IF END-IF STOP RUN.
このプログラムは、点数が高い順に判定していきます。IF文を重ねるときは、インデントを丁寧にして、読みやすくしておくのがコツです。どこがどの条件なのかが一目で分かるようになります。
複合条件「ANDOR」のサンプル
複数の条件を同時にチェックしたいときはANDやORを使います。例えば、「20歳以上で、かつ男性」だったら処理を実行するようにできます。
IDENTIFICATION DIVISION. PROGRAM-ID. IF-AND-OR. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-AGE PIC 9(2) VALUE 22. 01 WS-GENDER PIC X VALUE "M". PROCEDURE DIVISION. IF WS-AGE >= 20 AND WS-GENDER = "M" THEN DISPLAY "成人男性です" END-IF STOP RUN.
ANDは「両方が真なら実行」という意味です。逆にORを使えば、「どちらか一方でも真なら実行」となります。複雑な条件式を使うときは、括弧を使って優先順位を明確にしておくとバグが起きにくくなります。
IF (WS-AGE >= 20) OR (WS-GENDER = "M")
ANDやORを組み合わせると、プログラムにぐっと柔軟性が出ます。最初はシンプルな条件から練習してみると感覚がつかめてきます。
「COBOLのIF文」条件分岐の注意点
ENDIFのつけ忘れ
COBOLでは、IF文の終わりを明示的に書かないと、エラーになります。END-IFは「ここまでがIFの処理です」とプログラムに伝えるための大事な記号です。
もしEND-IFを書き忘れると、コンパイルエラーが出たり、意図と違う場所までIFの範囲が広がって、おかしな動きをすることがあります。
NG例(END-IFなし)
IF WS-VALUE > 0 DISPLAY "正の数です" DISPLAY "処理完了" STOP RUN.
このコードでは、DISPLAY "処理完了" もIF文の中と判断される可能性があります。
OK例(END-IFあり)
IF WS-VALUE > 0 DISPLAY "正の数です" END-IF DISPLAY "処理完了" STOP RUN.
END-IFを書いておくことで、IF文の範囲がハッキリして、トラブルを防げます。つけ忘れやすいので、書いたらすぐEND-IFを書くクセをつけるとラクです。
ピリオドの位置
COBOLでは文の終わりはピリオドで決まります。でも、場所を間違えると大変なことになります。IF文の途中でピリオドを打ってしまうと、そこでIFが終わったと判断されて、以降の処理が無視されてしまう場合があります。
NG例(THENのあとにピリオド)
IF WS-SCORE > 60 THEN. DISPLAY "合格" END-IF.
このコードでは、IF文の処理がDISPLAYに届かず、IF文の意味がなくなってしまいます。
OK例(ピリオドはEND-IFのあと)
IF WS-SCORE > 60 THEN DISPLAY "合格" END-IF.
THENのあとにはピリオドを書かない、END-IFのあとにだけピリオドを置く。このルールを守るだけで、IF文はぐっと安定します。
まとめ
ここまでで、COBOLのIF文について、基本から応用、そして注意点まで紹介してきました。最後にポイントをおさらいしておきましょう。
- IF文の基本構文は「IF 条件 THEN 処理 END-IF」
- ELSEを使えば、条件が偽の場合の処理も書ける
- IFの中にIFを入れるネストも可能(インデント必須)
- ANDやORで複数条件のチェックもできる
- END-IFの書き忘れはバグの元。必ず書く
- ピリオドの位置に要注意。文の終わりを正しく指定
IF文が書けるようになると、プログラムに判断力が加わって、ぐんと幅が広がります。最初はうまく動かないことがあるかもしれませんが、コツはとにかく手を動かすことです。
習うより慣れよ。今すぐサンプルを動かして、楽しく練習してみてください。
【関連記事】
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。