COBOLの変数の定義と初期化を完全ガイド!初心者にもやさしい入門講座
生徒
「COBOLでデータを使うときって、変数っていうものを使うんですよね?」
先生
「そうですね。COBOLでも、変数を使ってデータを一時的に記憶します。」
生徒
「変数って、どうやって作るんですか?難しくないですか?」
先生
「COBOLでは決まったルールに従って書くだけなので、とても簡単ですよ。順番に見ていきましょう。」
1. COBOLにおける変数とは?
COBOL(コボル)でプログラミングをする際には、変数を使ってデータを記憶します。変数とは、たとえば「名前」や「年齢」といった情報を一時的に置いておく“箱”のようなものです。この箱には、あとから自由に値を入れたり取り出したりすることができます。
変数を使うと、「この人の年齢は20歳です」や「商品の金額は1500円です」といったデータを記録できるようになります。
2. COBOLの変数の書き方(定義方法)
COBOLでは変数を使うには、DATA DIVISION(データ部)というところに書きます。さらにその中のWORKING-STORAGE SECTION(作業用のデータエリア)に変数を定義します。
例えば、「年齢」という変数を定義する場合は、次のように書きます。
WORKING-STORAGE SECTION.
01 AGE PIC 99.
ここで使われている用語の説明:
- 01:これはレベル番号と呼ばれ、データの構造を表します。基本的には01を使えばOKです。
- AGE:これは変数の名前です。自由に名前をつけられますが、英大文字と数字でつけるのが基本です。
- PIC:これは「ピクチャ」と読み、どんな形式のデータを入れるのかを表します。
- 99:2桁の数字を入れられるという意味です(たとえば12や35など)。
3. 初期化とは?COBOLでの初期値の設定方法
初期化とは、変数を使う前に最初の値(初期値)を入れておくことです。これは、何も入っていない状態で使ってしまうと、意図しない動作をすることがあるためです。
COBOLでは、VALUEを使って初期値を設定します。次のように書きます。
WORKING-STORAGE SECTION.
01 AGE PIC 99 VALUE 20.
このように書くと、「AGE」という変数には最初から20が入っている状態になります。
4. 複数の変数を定義する例
たとえば、名前(英文字)と年齢(数字)を両方記録したい場合は、以下のように複数の変数を定義できます。
WORKING-STORAGE SECTION.
01 NAME PIC A(10) VALUE "TANAKA".
01 AGE PIC 99 VALUE 25.
ここでのA(10)は、英字を10文字まで入れられるという意味です。Aはアルファベット用の型です。
5. 実際のCOBOLプログラムで使ってみよう
変数を定義して、それを使って画面に表示するプログラムの例です。これで、変数がどのように使われているかがよく分かります。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-VARIABLE.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NAME PIC A(10) VALUE "YAMADA".
01 AGE PIC 99 VALUE 30.
PROCEDURE DIVISION.
DISPLAY "名前は " NAME.
DISPLAY "年齢は " AGE " 歳です。".
STOP RUN.
このプログラムの実行結果:
名前は YAMADA
年齢は 30 歳です。
6. よく使うデータ型のPIC(ピクチャ)一覧
COBOLでは、変数の型をPICで指定します。以下は、よく使うPICの種類です。
- 9:数字(0〜9)を表します。
- A:アルファベット1文字を表します。
- X:英数字や記号を含む任意の1文字を表します。
たとえば、PIC X(5)と書けば、5文字のどんな文字列でも入れられる変数になります。
7. 数値の桁数や形式を指定する方法
数値を扱うときは、桁数や小数点の有無などもPICで指定します。
例:最大3桁の数字を入れたい場合
01 TOTAL-AMOUNT PIC 999 VALUE 100.
例:小数点付きの数値
01 TAX-RATE PIC 9V99 VALUE 805.
この例では、「8.05」を表します。Vは小数点の位置を示します(実際のプログラム中にはピリオドは書きません)。
まとめ
COBOLの変数は、ただ値を保存するだけの仕組みではなく、データの形式と意味をはっきり示す、とても大切な要素です。特に業務用のシステムでは、変数が正しく定義されているかどうかで、データの信頼性や処理結果の正確さが左右されます。今回の内容を振り返ると、変数を定義する場所、命名のルール、ピクチャで形式を指定する方法、初期値を設定する方法など、基礎ではありますが、COBOLらしさがぎゅっと詰まっている部分でした。
COBOLの変数を定義する際の流れとして、まずDATA DIVISIONに変数を書くこと、さらにWORKING-STORAGE SECTIONに置くことで、プログラムがどのようなデータを扱うのか明確になります。01や02といったレベル番号は、データ項目同士の階層関係を示すために存在し、業務ロジックの大きさによっては複数階層に分けて管理することもあります。最初のうちは01だけでも十分ですが、実務では複雑なデータ構造を扱うために多段階のレベル構成が必要になる場面も多く、COBOLの柔軟さを感じられるでしょう。
変数に入れられる内容を制御するPIC句の存在も非常に重要です。「数字だけ」「英字だけ」「なんでも入る」など、用途ごとに適切な型を選べるため、プログラムの動作ミスを防ぎ、データの正しさを保ちやすくなります。たとえば、年齢を扱うのにPIC X(10)としてしまうと、「文字列や記号でも入れられてしまう」という事態になり、本来期待している情報とずれてしまいます。逆に、PIC 9(3)のように桁数を指定しておけば「3桁の数字しか入らない」と表現でき、無効なデータを受け取りにくくなります。
初期値設定も欠かせない仕組みです。VALUEで最初から値を持たせておくことで、計算の前に毎回MOVEで値を入れる必要がなくなりますし、未初期化のままDISPLAYしてしまい、意図しない空白や不正値が出力されるといった問題も避けられます。特にINPUTデータがない場面でも決まった数字や文字を使いたいときに便利です。
また、複数の変数を並べて記述することで、小さな情報の組み合わせを1つの処理の中で扱うことができるようになります。名前・年齢・金額・合計値などをまとめてプログラム内で使うことで、表示、計算、ファイル出力など、実務に近い処理につながっていきます。この積み重ねがCOBOLの大規模な業務システムでの堅牢さにつながり、銀行や自治体、流通など多くの現場で長い間使われ続けている理由でもあります。
以下は、変数を使って簡単な計算と表示をするプログラム例です。ただ値を表示するだけでなく、数字を足したり、別の変数へ移したりと、COBOLの基本的なデータ処理が分かりやすく体験できます。
簡単な計算を含むサンプルプログラム
IDENTIFICATION DIVISION.
PROGRAM-ID. VARIABLE-CALC.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRICE PIC 999 VALUE 120.
01 QUANTITY PIC 99 VALUE 2.
01 TOTAL PIC 999 VALUE 0.
PROCEDURE DIVISION.
COMPUTE TOTAL = PRICE * QUANTITY
DISPLAY "単価は " PRICE " 円".
DISPLAY "数量は " QUANTITY " 個".
DISPLAY "合計金額は " TOTAL " 円です。".
STOP RUN.
PRICEとQUANTITYを掛け合わせ、合計をTOTALに入れ、DISPLAYで表示するだけのシンプルな処理ですが、変数を定義して使う基本が詰まっています。桁数をPICで指定しているため、数字が大きくずれたり、文字列になってしまったりといった不具合も防げます。
実務では、このような変数が何十種類も並び、受け取ったデータを加工したり、別システムへ渡したり、帳票として印刷したり、さまざまな工程に使われます。扱うデータが多いからこそ、正しく定義した変数の存在は欠かせません。変数名を見れば何のデータなのか理解でき、PICで見れば形式が分かり、VALUEで初期値の有無が判断できます。これらが揃うことで、COBOLのプログラムは読みやすく、メンテナンスしやすいものになります。
小数点を扱うときの「V」も重要です。表面上は小数点が見えなくても、計算で使うと正しい小数として扱われるため、税率や金額の計算処理では必須になります。たとえば消費税を計算する場合、整数だけでは表現しにくいため、小数の扱い方を理解しておくと役立ちます。
生徒
「変数って、ただ数字や文字を保存するだけだと思っていたけど、PICで形式まで決めるのは驚きました。」
先生
「そうですね。形式が決まっているからこそ、大量のデータを正しく扱うことができるんです。」
生徒
「VALUEで初期値を準備しておけば、MOVEを書かなくても最初から値が入っているのも便利ですね。」
先生
「未初期化のまま使うと表示がおかしくなることがあるので、VALUEはとても重要です。」
生徒
「計算に使うTOTALみたいな変数も、PICの桁数を指定することで余計な文字が入らないようにできるんですね。」
先生
「その通りです。桁があふれると正しい計算にならないので、PICはCOBOLで非常に大切な役割を持っています。」
生徒
「変数って奥が深いんですね。最初は数字と文字が入ればいいと思っていましたけど、意味がはっきりしていると読みやすいし安全だと感じました。」
先生
「まさにそこがCOBOLの良さです。明確でわかりやすいプログラムは、長い年月が経っても安心して使えます。」