1. 導入:なぜVALUE句が重要なのか
COBOLでプログラムを書く際、変数を宣言した直後に「とりあえず0を入れておきたい」「初期値としてスペースを埋めておきたい」ということはよくあります。もしVALUE句を使わない場合、メモリ上にはゴミデータ(以前の処理で残った値)が入っている可能性があります。VALUE句を適切に使うことで、プログラム開始時の変数の状態を確実にし、バグを未然に防ぐことができます。
2. 基礎知識:VALUE句の役割
VALUE句は、データ項目(変数)に対して初期値を割り当てるための構文です。主にプログラムのワーキングストレージ(WORKING-STORAGE SECTION)で定義する際、PIC句(データ型と桁数)の後に続けて記述します。
ここでのポイントは「プログラムが実行(ロード)される瞬間に値がセットされる」という点です。いちいちMOVE文で「0」を代入するコードを書く手間が省け、コードの可読性も向上します。
3. 実装と解決策
VALUE句を使用する際は、定義するデータ型に注意が必要です。数値項目(PIC 9)には数値を、文字項目(PIC X)にはシングルクォーテーションで囲った値を指定します。また、集団項目にVALUE句を指定すると、その配下のすべての項目がその値で初期化されるため、構造体の初期化にも非常に便利です。
4. サンプルプログラム
以下のコードをコピーして、ご自身の環境で試してみてください。
IDENTIFICATION DIVISION.
PROGRAM-ID. VALUE-SAMPLE.
WORKING-STORAGE SECTION.
- 数値項目の初期化
05 WS-COUNT PIC 9(3) VALUE 100.
- 文字項目の初期化
05 WS-NAME PIC X(10) VALUE ‘COBOL’.
- 集団項目を一括でスペースで初期化
05 WS-GROUP.
10 WS-ITEM-A PIC X(5) VALUE SPACES.
10 WS-ITEM-B PIC X(5) VALUE SPACES.
PROCEDURE DIVISION.
DISPLAY “初期値 WS-COUNT: ” WS-COUNT.
DISPLAY “初期値 WS-NAME : ” WS-NAME.
- 処理後の変更
MOVE 999 TO WS-COUNT.
DISPLAY “変更後 WS-COUNT: ” WS-COUNT.
STOP RUN.
5. 応用・注意点
現場でよくある失敗として「VALUE句で設定した値を、プログラムの途中で初期値に戻したい」というケースがあります。注意してほしいのは、VALUE句はあくまでプログラム起動時(メモリ確保時)に一度だけ働くということです。
プログラムの実行中に変数の値を初期値に戻したい場合は、再度MOVE文で値を代入するか、初期値用の定数項目を用意してMOVEする方法をとる必要があります。また、VALUE句とREDEFINES句を併用する場合、初期値は親項目(上位の定義)で指定する必要があるというルールも覚えておくと良いでしょう。基本をしっかり押さえて、堅牢なCOBOLプログラムを作成してくださいね。

コメント