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文でシンプルに使える
- コードの読みやすさと保守性が大きく向上する
- 定義の方法、使い方、注意点を押さえれば初心者でも問題なく活用できる
この記事で学んだことを活かして、ぜひ実際のコーディングで条件名条件を使ってみてください。 コードが見違えるほどスッキリしますよ。
【関連記事】
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。