【COBOL入門】定数定義でコード改善!VALUE句とレベル78をマスター

2025年4月8日火曜日

COBOL

COBOLのコードに「05 WS-TAX-RATE PIC 9(3)V99 VALUE 080.」なんて書いてあって、「080って何だっけ……?」と立ち止まったこと、ありませんか?同じ数値や文字列をあちこちに散らばせて書くと、あとで修正するときに抜け漏れが起きたり、そもそも意味が分からなくなったりしてしまいます。

この記事では、COBOLにおける定数の定義方法を、プログラミング初心者にもわかりやすく解説します。定数の基本から、「LEVEL 78」の使い方、変数とのちがい、そして実践的なコード例まで、ていねいに紹介します。

読み終わるころには、マジックナンバーに振り回されない、スッキリしたCOBOLコードが書けるようになります。

「COBOLって古い言語って聞くけど、ちゃんとスマートに書けるんだな!」と思ってもらえるかもしれません。ちょっとだけ未来の自分が楽しみになるかも…?

COBOLにおける定数とは?プログラムを分かりやすくする魔法

COBOLのコードを書いていると、意味の分からない数字や文字列が唐突に登場して、「なんだっけ?」と悩むことがあります。

たとえば、税率が「0.08」とだけ書かれていると、何の数字なのか判断しづらいですよね。

そんなときに役立つのが「定数」です。定数とは、プログラムの中で決して変わらない固定の値に、わかりやすい名前をつける仕組みです。たとえば、消費税率を表す「0.08」を、SALES-TAX-RATEという名前にしておけば、何の値かすぐに分かります。

「同じ値を何度も書いて、あとで変更が大変」「数字の意味が分からず、過去の自分と格闘している」そんな経験があるなら、定数を覚えておいて損はありません。むしろ、COBOLとちょっと仲良くなれる第一歩かもしれません。

なぜCOBOLで定数定義が重要なのか?3つのメリット

定数を使うと、COBOLのプログラムがぐっと読みやすく、直しやすくなります。ここでは定数を使う3つのメリットについて、分かりやすく紹介します。

  • コードの可読性が劇的に向上する
  • 修正箇所が1箇所で済み、保守性が高まる
  • プログラム全体で値の一貫性を保てる

それぞれのポイントを見ていきましょう。

メリット1:コードの可読性が劇的に向上する

例えば、こんなコードがあるとします。

IF TAX-AMOUNT > 0.08 THEN
    PERFORM CALCULATE-TAX

ぱっと見ただけでは、「0.08」が何を意味しているか分かりにくいですね。でも、定数を使って書き直すとこうなります。

IF TAX-AMOUNT > SALES-TAX-RATE THEN
    PERFORM CALCULATE-TAX

一目で「消費税の値だな」と分かります。読み手にもやさしいコードになります。

メリット2:修正箇所が1箇所で済み、保守性が高まる

消費税が8%から10%に変わったとき、マジックナンバーを使っていた場合、全ての「0.08」を探して修正しなければなりません。

IF TAX-AMOUNT > 0.08 THEN
    MOVE 0.08 TO WS-TAX-VALUE

見落としがあるとバグの元です。ですが、定数を使っていれば、定義部分だけを修正すれば済みます。

78 SALES-TAX-RATE VALUE 0.08.

たった1箇所直すだけで、プログラム全体が自動的に正しくなります。これは安心ですね。

メリット3:プログラム全体で値の一貫性を保てる

同じ値なのに、人によって「0.08」「.08」「008」など微妙に書き方が変わってしまうこともあります。しかも、ケアレスミスで「0.08」のつもりが「0.8」なんてことも。

定数にしておけば、常に同じ正しい値を使い続けられます。しかも、チームで開発していても、誰が見ても内容が伝わるので安心です。

プログラムの品質を保つうえでも、定数はお守りみたいな存在ですね。

COBOLの定数定義:レベル番号78とVALUE句の使い方

COBOLで定数を定義するときに使うのが「レベル番号78」と「VALUE句」です。定数はデータ部の中でも、WORKING-STORAGE SECTIONに書くのが基本です。まずは書き方のルールを整理してみましょう。

  • レベル番号78を使う
  • 定数名は、意味がすぐ分かる英大文字で
  • VALUE句で、固定したい値を設定

例えば、消費税率を定数で定義したい場合はこう書きます。

WORKING-STORAGE SECTION.
78 SALES-TAX-RATE VALUE 0.08.

レベル番号78は、COBOLで定数専用とされる番号です。VALUE句の部分で、変わらない値を設定します。PICTURE句やデータ型の指定は不要です。非常にシンプルですね。

名前は、意味が分かりやすく、全部大文字で書くのが一般的です。読みやすく、管理もしやすくなります。

定数の種類:数値定数と文字定数の定義方法

COBOLで使える定数には主に数値文字列の2種類があります。どちらもLEVEL 78とVALUE句を使って定義しますが、書き方には少し違いがあります。

数値定数

  • 定義例:
     78 DISCOUNT-RATE VALUE 0.15. 
  • 数字はそのまま書けばOK
  • PICTURE句は不要
  • 小数点も使用可能(処理系による)

文字定数

  • 定義例:
     78 COMPANY-NAME VALUE 'ACME Inc'. 
  • 文字列はシングルクォートで囲む
  • PICTURE句は不要
  • メッセージやラベルに使うと便利

どちらもVALUE句で値を設定するだけなので、定数の定義はとてもシンプルです。初期値の設定ミスを防ぐためにも、数値と文字の使い分けに慣れておくと安心です。

ここで差がつく!定数(レベル78)と変数(レベル01など)の違い

COBOL初心者がよく混乱するのが、定数(LEVEL 78)変数(LEVEL 01や77)のちがいです。見た目が似ていても、役割はまったく違います。違いを箇条書きで整理してみましょう。

定数(LEVEL 78)

  • レベル番号:78(定数専用)
  • 値は変更不可(プログラム中で変えられない)
  • PICTURE句は使わない
  • VALUE句で初期値を指定
  • 消費税率、定型メッセージなど「固定値」に使う

変数(LEVEL 01や77)

  • レベル番号:01や77など(データ領域を確保)
  • 値は変更可能(計算や代入で変化する)
  • PICTURE句でデータ形式を指定
  • 初期値を与える場合はVALUE句を使用
  • 金額、ユーザー入力、計算結果など「変化する値」に使う

ざっくり言えば、「変わるのが変数、変わらないのが定数」です。コードを書くときに迷ったら、「この値は途中で変わるか?」を考えてみると判断しやすくなります。

COBOL定数定義のサンプルプログラムと解説

ここまで学んだ内容をベースに、実際のCOBOLプログラムを作ってみましょう。今回は、消費税率を定数として定義し、商品の税込み価格を計算するシンプルな例です。

サンプルプログラム

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CALC-TAX.

       ENVIRONMENT DIVISION.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       * 定数の定義
       78 SALES-TAX-RATE VALUE 0.1.
       78 MESSAGE-TITLE   VALUE '【税込み計算結果】'.

       * 変数の定義
       01 ITEM-PRICE      PIC 9(5)V99 VALUE 1000.00.
       01 PRICE-WITH-TAX  PIC 9(5)V99.

       PROCEDURE DIVISION.

           COMPUTE PRICE-WITH-TAX = ITEM-PRICE + (ITEM-PRICE * SALES-TAX-RATE)

           DISPLAY MESSAGE-TITLE
           DISPLAY '元の価格       : ' ITEM-PRICE
           DISPLAY '税込み価格     : ' PRICE-WITH-TAX

           STOP RUN.

定数(78)と変数(01)の使い分けがポイントです。定数はレートやメッセージなど「変わらないもの」、変数は計算結果など「変化するもの」に使います。

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

【税込み計算結果】
元の価格       : 1000.00
税込み価格     : 1100.00

DISPLAY文で画面に結果がきちんと表示されます。消費税10%が加算された金額が出力されていますね。

サンプルプログラムの解説

IDENTIFICATION DIVISIONではプログラム名を設定しています。名前はなんでもOKですが、わかりやすくつけると管理が楽です。

DATA DIVISIONの中では、定数と変数を定義しています。定数は78レベルを使い、PICTURE句なしでVALUE句のみを書きます。ここでは「SALES-TAX-RATE」と「MESSAGE-TITLE」が定数です。

変数は01レベルで、PICTURE句(略してPIC)を使ってデータの形式を指定します。ITEM-PRICEには商品価格を、PRICE-WITH-TAXには税込み価格を格納します。

PROCEDURE DIVISIONでは、実際の処理を記述しています。COMPUTE文を使って、税込み金額を計算しています。ここで定数「SALES-TAX-RATE」が使われているのがポイントです。

DISPLAY文では、「MESSAGE-TITLE」という文字定数も使っています。固定のメッセージを使いたい場面にも定数は便利です。

【まとめ】COBOLの定数定義をマスターして、分かりやすいコードを書こう!

COBOLの定数はLEVEL 78 と VALUE句で定義します。定数を使うことで、コードが読みやすくなり、修正や管理も楽になります。定数と変数の違いをしっかり理解することも大切です。

数値だけでなく、文字列も定数にできるので、うまく活用すればプログラムの見通しがぐっと良くなります。今日からCOBOLコードに定数を取り入れて、読みやすくてミスの少ないコードを目指していきましょう!

【関連記事】

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

このブログを検索

  • ()

自己紹介

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

QooQ