COBOLの条件名条件とは?基本から使い方まで初心者向けに解説

2025年4月8日火曜日

COBOL

COBOLって、なんだか書いてるうちに“暗号文”みたいになってませんか?
「IF STATUS-CODE = 'A' OR 'B' OR 'C'」なんて条件が並びすぎて、見てるだけで頭がクラクラ…。しかも '1' や '0' が何を意味するのか、自分で書いたはずなのに意味を思い出せない、なんてこともありますよね。

そんなあなたに知ってほしいのが**条件名条件(レベル88)**です。
ちょっと硬そうな名前ですが、これを使えば、COBOLの条件文がぐっと読みやすくなって、保守も楽になります。

「え?そんな便利な機能、知らなかった…!」という方こそ、ぜひ読んでみてください。
COBOL初心者さんも安心して読み進められるように、やさしく・ていねいに解説しています。

この記事で学べること

・条件名条件(レベル88)の基本的な意味
・IF文をすっきりさせるメリットと活用場面
・定義のしかたと、実際の使い方(サンプル付き)

「わかりやすいCOBOL」を目指して、今日から一歩踏み出してみませんか?

COBOLの条件名条件とは? (レベル88の基本)

COBOLに「読みにくいIF文が多すぎる」と思ったことはありませんか? そんな時に役立つのが、条件名条件(レベル88)です。

条件名条件とは、あるデータ項目の特定の値や範囲に名前をつける機能です。 たとえば、「性別コード」が「1」なら「男性」、「2」なら「女性」というように、数字に意味を持たせるケース。 その“意味のある状態”に名前をつけて、プログラムをわかりやすくできます。

COBOLでは、レベル番号88を使って定義します。 普通の変数定義は01や05ですが、88を使うことで「意味のある条件名」として扱えるんです。

01 SEX-CODE    PIC 9.
   88 MALE      VALUE 1.
   88 FEMALE    VALUE 2.

IF文でも、このように使えます。

IF MALE
   DISPLAY "男性です"
END-IF

数値のまま書くより、見ただけで意味が伝わってきますよね。 まさに、プログラムを読みやすくするための便利な道具なんです。

なぜCOBOLで条件名条件を使うのか?メリットを解説

可読性がグンと上がる

IF文の中に数字や文字がずらっと並ぶと、何を意味してるのか一目で分かりません。 でも条件名条件を使えば、「意味が見えるコード」になります。

IF FLAG = "1"

これでは「1」が何を表しているか分かりませんが…

IF IS-VALID-DATA

こう書けば、見た瞬間に“意味”が分かりますよね。

保守がとってもラクになる

あとから「仕様が変わった!値を3にして!」ということ、よくありますよね。 普通に書いていると、プログラム中の “3” を全部探して書き換える羽目に…。 でも条件名条件なら、定義だけを変えれば済むんです。

88 ACTIVE   VALUE 1.

このVALUEを“3”に変更するだけ。 IF文は変えなくてOKなので、ミスも減って効率アップです。

IF文がスッキリする

たとえば次のような長い条件があったとします。

IF STATUS-CODE = "A" OR STATUS-CODE = "B" OR STATUS-CODE = "C"

これを条件名で定義しておけば、

IF IS-VALID-STATUS

コンパクトに書けて見やすさバツグン。 読む人も楽になりますし、バグの原因も減らせます。

COBOL 条件名条件の基本的な定義方法 (レベル88)

条件名条件の定義は、データ部(DATA DIVISION)のWORKING-STORAGE SECTIONで行います。 親となるデータ項目の下にレベル番号88を使って条件名を定義します。

イメージしやすいように、構造を図っぽく表すとこんな感じです。

01 親データ項目.
   88 条件名 VALUE 条件となる値.

レベル番号88は、普通の変数(01や05など)とは違い、条件の名前を表すためだけに使います。 VALUE句では、判定したい値や範囲を指定します。

定義された条件名は、IF文などの中でTRUE/FALSE(真/偽)を返す名前付き条件として使えます。

単一の値に対する条件名の定義

一番シンプルなパターンは、「ある値に一致したらTRUE」とする条件名の定義です。 たとえば、性別コードが1のときに「男性」とわかるようにしたい場合は、次のように書きます。

01 SEX-CODE     PIC 9.
   88 MALE      VALUE 1.

MALEという条件名は、SEX-CODEが1のときにTRUEになります。 IF文で使うと、こうなります。

IF MALE
   DISPLAY "男性です"
END-IF

SEX-CODE = 1 と書くより、何を意味するのかパッと見てわかりやすいですよね。

範囲に対する条件名の定義

今度は「ある範囲の値すべて」にTRUEを返すパターンです。 そのとき使うのがTHRU(またはTHROUGH)というキーワードです。 20〜29歳の人を「TWENTIES」として定義してみましょう。

01 AGE           PIC 99.
   88 TWENTIES   VALUE 20 THRU 29.

この定義では、AGEが20〜29の間にあるときだけ、TWENTIESがTRUEになります。 IF文ではこう書きます。

IF TWENTIES
   DISPLAY "20代です"
END-IF

THRUは「〜から〜まで」という意味の英語なので、そのまま覚えてしまえばOKです。

複数の値に対する条件名の定義

今度は「この中のどれかに当てはまればOK」というケースです。 たとえば、ステータスコードがA、B、Cのどれかなら“有効”とみなしたいとき、こんなふうに定義します。

01 STATUS-CODE    PIC X.
   88 ACTIVE       VALUE "A", "B", "C".

VALUE句に複数の値をカンマ区切りで並べるだけです。 または、こう書くこともできます。

01 STATUS-CODE    PIC X.
   88 ACTIVE       VALUE "A"
                   VALUE "B"
                   VALUE "C".

どちらの書き方でも意味はまったく同じです。 使いやすい方でOK。プログラムの流れに合わせて選ぶといいですね。

COBOL 条件名条件の使い方:IF文での活用

定義した条件名は、手続き部(PROCEDURE DIVISION)でIF 条件名の形で使えます。 値を直接比較しなくても、意味のある名前で判断できるのがポイントです。

まず、使わない場合はこうなります。

IF SEX-CODE = 1
   DISPLAY "男性です"
END-IF

次に、条件名を使った場合を見てください。

IF MALE
   DISPLAY "男性です"
END-IF

見た目もスッキリ、意味もパッと分かります。 IF MALEは、SEX-CODEが1だったらTRUEになります。

逆の条件(偽の場合)を判断したいときは、IF NOT 条件名と書きます。

IF NOT MALE
   DISPLAY "男性ではありません"
END-IF

値を使わずに意味だけで条件を表現できるので、読みやすく、保守しやすいコードになります。

COBOL 条件名条件のサンプルプログラム

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CHECK-GENDER.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 SEX-CODE     PIC 9.
          88 MALE      VALUE 1.
          88 FEMALE    VALUE 2.

       PROCEDURE DIVISION.
       DISPLAY "性別を入力してください(1=男性, 2=女性):".
       ACCEPT SEX-CODE.

       IF MALE
           DISPLAY "男性が入力されました。"
       END-IF

       IF FEMALE
           DISPLAY "女性が入力されました。"
       END-IF

       STOP RUN.

サンプルプログラム解説

まずはIDENTIFICATION DIVISION。プログラム名を定義しています。

次にDATA DIVISION。ここでデータ項目 SEX-CODE を定義し、その下にレベル88で条件名 MALE と FEMALE を設定しています。 それぞれ、SEX-CODEの値が1、または2のときにTRUEになります。

そしてPROCEDURE DIVISIONでは、SEX-CODEに入力された値を使ってIF文で条件をチェックします。 IF MALE や IF FEMALE のように使えば、数字を直接比較しなくてもOKです。

サンプルプログラム実行結果

入力と出力の例をいくつか紹介します。

入力: 1

性別を入力してください(1=男性, 2=女性):
1
男性が入力されました。

入力: 2

性別を入力してください(1=男性, 2=女性):
2
女性が入力されました。

入力: 9(定義外)

性別を入力してください(1=男性, 2=女性):
9

1でも2でもなければ、どちらのIF文もTRUEにならないため、何も表示されません。 条件名は、定義した値にだけ反応するのがポイントです。

COBOL 条件名条件を使う上での注意点

条件名条件はとても便利ですが、使い方を間違えると「わかりやすさ」が逆に損なわれることもあります。 初心者がつまずきやすいポイントや、知っておくと使いやすくなるコツをまとめて紹介します。

  • 条件名は意味が伝わる名前にする
    たとえば、88 FLAG1 よりも 88 IS-APPROVED のほうが意味が明確です。
  • 条件名は親データ項目の値に依存している
    IF文でチェックしているのは、あくまで親の値です。条件名が“変数”のように動くわけではありません。
  • 条件名の定義は重複しないように
    同じデータ項目に対して、同じ値を持つ条件名を複数定義すると混乱します。
  • 条件名の数は適度に
    1つのデータ項目に対して、10個も20個も条件名をつけると逆に読みにくくなります。
  • SET文は初心者には扱いが難しい
    SET 文で条件名をON/OFFにする書き方もありますが、まずは読み取り専用として使うだけで十分です。

パフォーマンス面での問題はほとんどありませんが、条件名の付けすぎ意味不明な名前は避けましょう。 伝わらない名前は、ないのと同じです。

まとめ

ここまで、COBOLの条件名条件について順を追って学んできました。 最後に、ポイントを簡単に振り返っておきましょう。

  • 条件名条件は、データの状態に名前をつける機能
  • レベル88で定義し、IF文でシンプルに使える
  • コードの読みやすさと保守性が大きく向上する
  • 定義の方法、使い方、注意点を押さえれば初心者でも問題なく活用できる

この記事で学んだことを活かして、ぜひ実際のコーディングで条件名条件を使ってみてください。 コードが見違えるほどスッキリしますよ。

【関連記事】

>> 今さら聞けない「COBOLとは?」

このブログを検索

  • ()

自己紹介

自分の写真
リモートワークでエンジニア兼Webディレクターとして活動しています。プログラミングやAIなど、日々の業務や学びの中で得た知識や気づきをわかりやすく発信し、これからITスキルを身につけたい人にも役立つ情報をお届けします。 note → https://note.com/yurufuri X → https://x.com/mnao111

QooQ