「COBOLで変数に初期値を入れる方法って、なんか難しそう…」と感じていませんか?
「VALUE句って聞いたことあるけど、実際どう書けばいいの?」というモヤモヤ、ここでスッキリさせましょう。
COBOLのVALUE句とは?初期値設定の基本を理解する
COBOLのVALUE句は、データ項目を作るときにあらかじめ値を入れておく仕組みです。
プログラムの実行が始まる前に、変数の“お部屋”に荷物を入れておくようなイメージです。ゲームのキャラを作るときに、最初から「HP=100」と決めておくような感覚に近いかもしれません。
もし初期値を設定していないと、変数には何が入っているか分からなくなります。それが原因で、思わぬバグが出ることもあります。
VALUE句を使えば、「この変数は最初からこの値ですよ」としっかり宣言できるため、安心して処理を進められます。
しかも、初期値は後で代入するのではなく、宣言した瞬間にセットされるのがポイントです。なので、「忘れてた…」というミスも減らせます。
プログラムの見た目もスッキリするので、他の人が読んでもわかりやすくなります。
COBOL VALUE句の基本的な書き方(構文)
VALUE句の基本的な形は、とてもシンプルです。
01 変数名 PIC データ型 VALUE 初期値.
この構文には、次のようなパーツが含まれています。
- レベル番号(01など):変数の「階層」や「グループ構造」を決める番号です。最初は「01」で覚えておけばOKです。
- 変数名:好きな名前を付けられます。ルールとしてはアルファベットと数字の組み合わせが使えます。
- PIC句(ピク句):データの種類やサイズを決めます。たとえば文字なら「PIC X(10)」、数字なら「PIC 9(5)」など。
- VALUE句:初期値を入れる場所です。
- 初期値:実際に入れたい値を書きます。文字ならシングルクォート(')で囲みます。例:'HELLO'
具体的な例を見てみましょう。
01 USER-NAME PIC X(10) VALUE 'TARO'. 01 AGE PIC 9(3) VALUE 025.
このように書くと、プログラムがスタートした時点で、USER-NAMEには「TARO」、AGEには「025」が入った状態になります。
書いた瞬間に値が入るというのが、VALUE句の強みです。
データ型別!COBOL VALUE句での初期値設定方法
COBOLではデータの型によって、VALUE句の書き方が少し変わります。
よく使われるのは文字データ(PIC X)と数字データ(PIC 9)の2つです。それぞれの型に合った書き方で初期値をセットしないと、エラーになったり想定外の動作をすることがあります。
ここではデータ型ごとにVALUE句の使い方を分けて、分かりやすく紹介します。
文字項目(PIC X)への初期値設定
文字データを扱うときは、PIC X(n)の形で項目を定義します。VALUE句を使って文字列を入れる場合、必ずシングルクォート(')かダブルクォート(")で囲む必要があります。
例を見てみましょう。
01 USER-NAME PIC X(10) VALUE 'HELLO'. 01 CITY PIC X(5) VALUE "TOKYO".
このように書けば、USER-NAMEにはHELLO、CITYにはTOKYOがあらかじめ入った状態でプログラムがスタートします。
初期値として空白を入れたい場合には、定数の SPACESを使うのが便利です。
01 BLANK-FIELD PIC X(8) VALUE SPACES.
SPACESを使うと、全ての文字が空白で埋められます。見た目は地味ですが、よく使うテクニックです。
数字項目(PIC 9)への初期値設定
数字データにはPIC 9(n)やPIC S9(n)を使います。Sはマイナスの符号をつけるかどうかを意味します。
数字の初期値はクォーテーションで囲まなくてOKです。
01 AGE PIC 9(3) VALUE 123. 01 POINTS PIC S9(4) VALUE -10.
この例では、AGEには123が、POINTSには-10が最初から入ります。
値をゼロで初期化したい場合には、定数の ZEROS または ZEROを使います。どちらも意味は同じで、どちらを使っても大丈夫です。
01 SCORE PIC 9(5) VALUE ZEROS. 01 RATE PIC 9(2) VALUE ZERO.
ゼロをよく使う場面では、数値リテラルよりZEROSのほうがパッと見て分かりやすいので人気があります。
よく使う特殊な初期値設定(スペース・ゼロ)
COBOLではSPACESとZEROSを使った初期化がとてもよく登場します。
たとえば、入力欄をクリアする処理や、帳票の出力前の初期化など、あらゆる場面で使われています。
「何も入ってない状態」にしたいときはSPACES、「数値をゼロにしたい」ときはZEROSを使う、という覚え方でOKです。
01 NAME PIC X(10) VALUE SPACES. 01 TOTAL PIC 9(5) VALUE ZEROS.
初期状態を保証したいときの基本技として、まずはこの2つをマスターしておくと安心です。
COBOL VALUE句を使う上での注意点とよくある間違い
VALUE句はとても便利ですが、間違った使い方をするとエラーの原因になります。
特に初心者のうちは、ちょっとしたルール違反に気づかずコンパイルで止まることもあります。
ここではつまずきやすいポイントをピックアップして、どうすれば安全に使えるかを解説します。
WORKING-STORAGE SECTION以外での使用
VALUE句は基本的に WORKING-STORAGE SECTION で使うものと覚えておいてください。
たとえば FILE SECTION や LINKAGE SECTION に書こうとすると、コンパイルエラーになることがあります。
COBOLのルール上、VALUE句での初期化は、プログラム起動時に自動で変数に値を入れておくという使い方に限られます。なので、実行中に外部とやりとりするようなエリアでは意味が合わなくなるんですね。
最初のうちは「VALUE句は WORKING-STORAGE 専用」とシンプルに覚えておくと安心です。
データ型と初期値の不一致
VALUE句では、データ型と初期値の型が合っていないとトラブルの元になります。
よくあるパターンを紹介します。
01 MY-NUMBER PIC 9(3) VALUE '123'. * 文字を指定 → ダメ 01 MY-NAME PIC X(5) VALUE 100. * 数字を指定 → ダメ 01 PRICE PIC 9(3) VALUE 1000. * 桁オーバー → エラー
数字項目(PIC 9)に文字を入れたり、逆に文字項目(PIC X)に数字を入れたりすると、コンパイルエラーになるか、意図しない動作につながることがあります。
また、桁数にも注意が必要です。たとえばPIC 9(3)は3桁までしか入らないので、VALUE 1000と書くとオーバーしてエラーになります。
数字なら数字、文字なら文字、としっかり型をそろえるのが基本です。初期値の長さも、指定された桁数にちゃんと収まっているかを確認しましょう。
COBOL VALUE句の活用:サンプルプログラムと解説
ここでは、VALUE句での初期化が実際にどのように動くのかを確かめるために、シンプルなCOBOLプログラムを紹介します。
文字と数字のデータ項目に対して、直接値を入れたり、SPACESやZEROSを使ったりと、基本の使い方をすべて盛り込んでいます。
プログラム全体と実行結果をチェックしながら、一行ずつ見ていきましょう。
<サンプルプログラム>
IDENTIFICATION DIVISION. PROGRAM-ID. VALUE-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-USER-NAME PIC X(15) VALUE 'TARO YAMADA'. 01 WS-CITY PIC X(10) VALUE SPACES. 01 WS-AGE PIC 9(3) VALUE 025. 01 WS-POINTS PIC 9(5) VALUE ZEROS. PROCEDURE DIVISION. DISPLAY 'USER NAME : ' WS-USER-NAME DISPLAY 'CITY : ' WS-CITY DISPLAY 'AGE : ' WS-AGE DISPLAY 'POINTS : ' WS-POINTS STOP RUN.
<実行結果>
USER NAME : TARO YAMADA CITY : AGE : 025 POINTS : 00000
01 WS-USER-NAME PIC X(15) VALUE 'TARO YAMADA'.
15文字の文字項目に、TARO YAMADA という名前を初期値として設定しています。名前の後ろにスペースが自動的に補われて、15文字ぴったりになります。
01 WS-CITY PIC X(10) VALUE SPACES.
文字項目を空白で初期化しています。VALUE句に SPACES を使うことで、CITY は10文字すべてがスペースになります。DISPLAYしても何も見えないのはそのためです。
01 WS-AGE PIC 9(3) VALUE 025.
AGEには 025 が入っています。3桁の数字項目なので、025という形式で表示されます。VALUE句にはクォーテーションは不要です。
01 WS-POINTS PIC 9(5) VALUE ZEROS.
ZEROS を使って、5桁の数字をすべて0で初期化しています。00000 と表示されるのがその証拠です。
このように、VALUE句を使えばプログラムの開始時点で値がセットされるため、変数の準備がしっかり整った状態で処理を始められます。
まとめ
COBOLのVALUE句は、変数に初期値をあらかじめ設定できる便利な機能です。
文字にはリテラルやSPACES、数字には数値やZEROSを使うことで、プログラムの安定性と見やすさがアップします。
データ型との相性や書き方に注意しながら、基本を押さえておくだけでエラーもグッと減ります。
最初はシンプルな初期値から始めて、少しずつ慣れていきましょう。
【関連記事】
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。