COBOLでAND・ORを使った複合条件を初心者でもわかるように完全ガイド
生徒
「COBOLで複数の条件を同時にチェックするにはどう書けばいいですか?」
先生
「COBOLでは、ANDやORというキーワードを使って、条件を組み合わせることができますよ。」
生徒
「ANDとORは具体的にどう違うんですか?」
先生
「それでは、AND・ORを使った複合条件について、順番にわかりやすく説明していきますね!」
1. ANDとORって何?簡単なイメージ紹介
COBOLに限らずプログラミングでは、複合条件と呼ばれる「複数の条件を組み合わせて判断する考え方」がとても重要です。ANDやORは、その複合条件を作るための基本ルールになります。
まずANDは、「すべての条件がそろったときだけOK」という意味です。一方でORは、「どれか一つでも条件を満たしていればOK」という意味になります。
たとえば日常生活で考えると、
「雨が降っている AND 傘を持っている」なら外出できる、
「雨が降っている OR 屋根がある」なら濡れずに済む、という感覚に近いです。
初心者向け:超かんたんイメージ例
IF MONEY >= 100 AND SHOP = "OPEN" THEN
DISPLAY "買い物ができます。"
END-IF
やさしく解説:
・お金が100以上かつお店が開いているときだけ表示されます。
・どちらか一方でも欠けると、処理は実行されません。
・この「両方そろう」という感覚がANDです。
逆にORの場合は、「条件のどちらかが成立すればよい」という考え方になります。最初はAND=全部必要、OR=どれかでOKと覚えると混乱しにくくなります。
2. COBOLでANDを使った複合条件
ANDは「条件を同時に満たすときだけOK」という考え方です。COBOLのIF文でANDを使うと、「AもBも正しいなら実行する」という形で、チェックを1行にまとめられます。
ここでは「年齢が20以上 AND 性別が男性」という条件を使った例を見てみましょう。どちらか片方だけ当てはまっても表示されないので、「両方そろっているか」を確認したい場面でよく使われます。
IF AGE >= 20 AND GENDER = "M" THEN
DISPLAY "あなたは成人男性です。"
END-IF
このコードは「AGE(年齢)が20以上」かつ「GENDER(性別)がM(男性)」のときにだけメッセージを表示します。つまり、20歳以上でも性別が違えば表示されませんし、男性でも年齢が19なら表示されません。
初心者向け:ANDの動きを結果でイメージ
IF AGE >= 20 AND GENDER = "M" THEN
DISPLAY "OK(両方当てはまる)"
ELSE
DISPLAY "NG(どちらか足りない)"
END-IF
やさしく解説:
・ANDは「チェック項目を2つ並べる」イメージです。
・どちらも正しいときだけOKになるので、条件が厳しめになります。
・迷ったら「AND=全部必要」と覚えると、読み間違いを減らせます。
3. COBOLでORを使った複合条件
ORは「どちらか一方でも条件を満たせばOK」という考え方です。ANDが“全部そろっているか”を見るのに対して、ORは“どれか当たっていればいいか”を判断します。割引の判定や、例外的に許可したい条件があるときに便利です。
次に「年齢が65以上 OR 学生である」条件を試してみましょう。どちらかの条件が成立すればOKなので、年齢が若くても学生なら割引、逆に学生でなくても65以上なら割引というルールを1行で表せます。
IF AGE >= 65 OR STATUS = "STUDENT" THEN
DISPLAY "割引が適用されます。"
END-IF
このコードは、AGEが65以上またはSTATUSが「STUDENT(学生)」ならメッセージを表示します。どちらか片方に当てはまれば動くので、「条件がゆるめになる」のがORの特徴です。
初心者向け:ORの動きを結果でイメージ
IF AGE >= 65 OR STATUS = "STUDENT" THEN
DISPLAY "OK(どちらか当てはまる)"
ELSE
DISPLAY "NG(どちらも当てはまらない)"
END-IF
やさしく解説:
・ORは「候補を2つ並べて、どっちか当たればOK」というイメージです。
・片方が成立していれば実行されるので、条件の抜け道(例外)を作りたいときに向きます。
・迷ったら「OR=どれかでOK」と覚えるとスッと読めます。
4. ANDとORを組み合わせるときの注意点
複合条件が増えると「どの条件が優先されるか(結合の順番)」が大事になります。COBOLではANDとORを混ぜたとき、ANDが先に処理されます。
例えば次のような場合:
IF AGE >= 20 AND STATUS = "STUDENT" OR VIP = "Y" THEN
DISPLAY "特別なメッセージ"
END-IF
これは「(年齢20以上で学生) OR VIPである」の意味になります。
もし「年齢20以上かつ(学生またはVIP)」にしたい場合は、かっこ(括弧)は書けないので、IF文を二段に分けて書く方法を使います。
IF AGE >= 20 AND STATUS = "STUDENT" THEN
DISPLAY "成人学生です。"
ELSE
IF AGE >= 20 AND VIP = "Y" THEN
DISPLAY "成人VIPです。"
END-IF
END-IF
5. 複合条件を使うときのポイント整理
- データ型を揃える:AGEは数値、GENDERはい文字など、比べる値の形式を統一すること。
- ANDとORの優先順位を意識する:ANDが先、ORが後で判断される。
- 読みやすい書き方を心がける:複雑な場合はIFを分けて書くと理解しやすい。
こうすることで、プログラミング未経験でも読みやすく、ミスを減らせます。
6. 実行結果のイメージ
たとえばAGE=22、GENDER="M"の場合:
あなたは成人男性です。
AGE=70、STATUS="NONE"、VIP="Y"の場合:
成人VIPです。
どちらの条件にも当てはまらないときは、何も表示されません。
まとめ
COBOLにおけるANDやORを使った複合条件は、現実のビジネスロジックを忠実に表現する上で欠かせないテクニックです。単純なIF文では実現しきれないような複雑な条件判断を可能にするため、実務でも頻繁に利用されます。たとえば「年齢が20歳以上かつ男性」「65歳以上または学生」といったように、複数の条件を組み合わせて処理を分岐させる場面では、今回学んだAND・ORの使い方がとても役立ちます。
特にCOBOLのANDとORには優先順位があり、ANDが先に評価されるという仕様は忘れてはいけません。IF文でANDとORを混在させた場合、意図しない結果を招くこともあるため、必要であればIF文を分けて記述する、という工夫がとても大切です。また、COBOLでは括弧を使って条件のまとまりを明示することができないため、IFのネスト(入れ子構造)を上手に使って論理の流れを明確に示す技術も求められます。
さらに、条件文を書く際には変数のデータ型にも気を配る必要があります。数値型(例えばAGE)と文字列型(例えばGENDERやSTATUS)は比較の対象として扱い方が異なるため、型の不一致によってエラーが発生しないよう、記述前に変数定義を確認しておくことが重要です。これは初学者がつまずきやすいポイントでもあります。
COBOLのような業務系プログラミング言語では、条件分岐を使って帳票の出し分けをしたり、データの抽出条件を制御したりと、実際の処理に深く関わってきます。そのため、ANDやORを正確に理解して正しく使えるようになることは、今後のプログラミング力全体を底上げする大きな一歩になります。
最後に、COBOLのIF文は読みやすさを意識することも大切です。複雑な条件はなるべく分解し、誰が見てもすぐに意味が理解できるような記述を心がけましょう。これは保守性や引き継ぎの観点でも非常に重要な考え方です。
サンプルプログラム:AND・ORを組み合わせた会員判定
IDENTIFICATION DIVISION.
PROGRAM-ID. MEMBER-CHECK.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 AGE PIC 99 VALUE ZEROS.
01 STATUS PIC X(10) VALUE SPACES.
01 VIP-FLAG PIC X VALUE SPACE.
01 MSG PIC X(40).
PROCEDURE DIVISION.
DISPLAY "年齢を入力してください:"
ACCEPT AGE
DISPLAY "ステータスを入力してください(例:STUDENT):"
ACCEPT STATUS
DISPLAY "VIPフラグを入力してください(Y/N):"
ACCEPT VIP-FLAG
IF AGE >= 65 OR STATUS = "STUDENT" THEN
MOVE "割引対象の会員です。" TO MSG
ELSE
IF AGE >= 20 AND VIP-FLAG = "Y" THEN
MOVE "成人VIP会員です。" TO MSG
ELSE
MOVE "一般会員です。" TO MSG
END-IF
END-IF
DISPLAY MSG
STOP RUN.
このプログラムは、複数の条件を組み合わせて「割引対象」「VIP会員」「一般会員」といった分類を行います。現場でよく使われるロジックの一例として参考になる構成です。
生徒
「ANDとORって、日常の考え方に近いけど、プログラムだと順番に気をつけなきゃいけないんですね。」
先生
「そうなんです。COBOLではANDが先に処理されるから、思った通りの動作にするにはIFの分け方も大事ですよ。」
生徒
「かっこが使えないって聞いたときは焦ったけど、IFを分けて書けばちゃんと整理できるんですね。」
先生
「その通り。複雑な条件は読みやすく分ける方が、他の人にもわかりやすくて安全です。」
生徒
「今回のサンプルみたいに、実務っぽい内容で練習すると理解が深まりそうです!」
先生
「実際の業務で出てくる条件を想定してコードを書くのはとても良い練習になりますよ。次はNOT条件も使ってみましょうか。」