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コードに定数を取り入れて、読みやすくてミスの少ないコードを目指していきましょう!
【関連記事】
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。