導入
レッスン9からずっと VALUE "Hello, COBOL!" のような記述をさらっと使ってきました。ここで改めて VALUE句 の役割を整理しておきましょう。
説明
VALUE句は、変数を宣言すると同時に初期値を設定する仕組みです。
01 WS-GREETING PIC X(20) VALUE "Hello!".
01 WS-COUNT PIC 9(3) VALUE 0.
01 WS-TAX-RATE PIC V99 VALUE 0.10.
01 WS-COMPANY-NAME PIC X(30) VALUE "Become Coder Inc.".
- 文字列には
""(ダブルクォート)で値を指定します。 - 数値はそのまま書きます(
VALUE 0.やVALUE 0.10.のように)。 - VALUE句で初期化しなかった変数の中身は不定(保証されない) です。他の多くの言語のように「宣言しただけで自動的にゼロや空文字になる」とは限らないため、必要な変数には明示的に
VALUEを付ける習慣が大切です。
集団項目に対しても、子項目それぞれにVALUE句を付けられます。
01 WS-PERSON.
05 WS-NAME PIC X(10) VALUE SPACES.
05 WS-AGE PIC 9(3) VALUE ZEROS.
ここで SPACES と ZEROS という特別な予約語が登場しました。COBOLには、よく使う初期値のための便利な定数語が用意されています。
| 予約語 | 意味 |
|---|---|
SPACES | 空白で埋める |
ZEROS(ZEROESも可) | ゼロで埋める |
HIGH-VALUES | その文字コードで表現できる最大値で埋める(ソート時の番人などに使う) |
LOW-VALUES | 最小値(多くはヌル文字)で埋める |
VALUE句は「宣言時に決まる初期値」であり、実行中に変わる値の代入は次章で学ぶ MOVE 文や算術命令で行います。「最初の値を決めるのがVALUE句、実行中に変えるのがMOVEなどの文」と覚えておきましょう。
試すには
WS-COUNT のVALUE句を書き忘れたまま DISPLAY WS-COUNT をしたらどうなるか、想像してみてください(多くの処理系では実行のたびに違うゴミの値が出ることがあります)。「初期化を忘れない」という習慣の大切さが、他の言語以上にCOBOLでは重要です。