カテゴリ: COBOL 更新日: 2025/10/31

COBOLのINITIALIZE文を完全ガイド!初心者でもわかる変数初期化の基本と注意点

INITIALIZE文を使った変数初期化と注意点
INITIALIZE文を使った変数初期化と注意点

先生と生徒の会話形式で理解しよう

生徒

「先生、COBOLで変数を最初の状態に戻す方法ってありますか?」

先生

「良い質問ですね。COBOLでは、INITIALIZE(イニシャライズ)文を使うと、変数を簡単に初期化できますよ。」

生徒

「初期化って、どんなことをしてくれるんですか?」

先生

「初期化とは、変数の中身を最初の状態、つまり“空っぽ”や“ゼロ”に戻すことです。プログラムを正しく動かすためにはとても大切な操作なんです。」

生徒

「なるほど!じゃあ、そのINITIALIZE文の使い方を教えてください!」

先生

「もちろん!では、基本的な使い方から順番に見ていきましょう。」

1. INITIALIZE文とは?

1. INITIALIZE文とは?
1. INITIALIZE文とは?

COBOLのINITIALIZE文は、変数を初期状態に戻すための命令文です。初期化(しょきか)とは、変数の中身をあらかじめ決まった値に戻すことをいいます。例えば、数値なら「0」に、文字列なら「空白(スペース)」に戻してくれます。

プログラムを作るとき、変数に古い値が残ったままだと、思わぬ計算ミスや表示エラーが起きることがあります。そんなときに、INITIALIZEを使うことで、変数をきれいにリセット(まっさらに)できるのです。

2. INITIALIZE文の基本構文

2. INITIALIZE文の基本構文
2. INITIALIZE文の基本構文

基本的な書き方はとてもシンプルです。


INITIALIZE 変数名

たとえば、下のように書くと、変数を初期化できます。


DATA DIVISION.
WORKING-STORAGE SECTION.
01  WS-NAME    PIC A(10).
01  WS-AGE     PIC 9(3).

PROCEDURE DIVISION.
    MOVE "TARO" TO WS-NAME
    MOVE 25 TO WS-AGE
    DISPLAY "初期化前: " WS-NAME WS-AGE
    INITIALIZE WS-NAME WS-AGE
    DISPLAY "初期化後: " WS-NAME WS-AGE
    STOP RUN.

実行すると、結果は次のようになります。


初期化前: TARO        025
初期化後:            000

このように、文字の変数(WS-NAME)は空白に、数値の変数(WS-AGE)はゼロに戻っています。

3. INITIALIZE文で初期化される内容

3. INITIALIZE文で初期化される内容
3. INITIALIZE文で初期化される内容

INITIALIZEは、変数の種類(データ型)によって、設定される値が異なります。以下が基本的なルールです。

  • 数値項目(PIC 9など):ゼロ(0)が入ります。
  • 文字項目(PIC AやXなど):空白(スペース)が入ります。
  • 編集項目(PIC Zや$などを含む):空白になります。
  • 再定義項目(REDEFINES):初期化されません。

このように、項目の種類ごとに自動で適切な初期値をセットしてくれるので、とても便利です。

4. VALUE句との違いに注意!

4. VALUE句との違いに注意!
4. VALUE句との違いに注意!

COBOLでは、変数を定義するときにVALUE句(バリューく)を使って、最初の値を設定することができます。


01  WS-COUNT   PIC 9(3) VALUE 5.

しかし、INITIALIZE文を使っても、このVALUE句に書いた値は再設定されません。
つまり、INITIALIZEを使っても、VALUE句の値には戻らないのです。これが初心者の方がよく混乱するポイントです。

次の例を見てみましょう。


DATA DIVISION.
WORKING-STORAGE SECTION.
01  WS-COUNT   PIC 9(3) VALUE 5.

PROCEDURE DIVISION.
    MOVE 123 TO WS-COUNT
    DISPLAY "初期化前: " WS-COUNT
    INITIALIZE WS-COUNT
    DISPLAY "初期化後: " WS-COUNT
    STOP RUN.

初期化前: 123
初期化後: 000

見てわかるように、初期化後の値はVALUE 5ではなく「0」になります。INITIALIZE文はVALUE句の値には戻さないということを覚えておきましょう。

5. INITIALIZE文のオプション

5. INITIALIZE文のオプション
5. INITIALIZE文のオプション

INITIALIZE文には、いくつかのオプションを付けることもできます。代表的なのが、REPLACING(リプレイシング)句です。これは、特定の種類のデータだけを指定して、別の値で初期化する方法です。


INITIALIZE WS-DATA
    REPLACING NUMERIC DATA BY 9
               ALPHANUMERIC DATA BY "*"

この例では、数値データは9、文字データは「*(アスタリスク)」で初期化されます。つまり、自分で初期化したい値を自由に設定できるのです。

6. INITIALIZEを使うときの注意点

6. INITIALIZEを使うときの注意点
6. INITIALIZEを使うときの注意点

便利なINITIALIZE文ですが、使うときにはいくつかの注意が必要です。

① 再定義(REDEFINES)には効かない

再定義された項目は初期化の対象外です。再定義とは、同じメモリ領域を別の形で使う仕組みのことです。もし必要なら、MOVE文で手動で初期化しましょう。

② GROUP項目を初期化するときは注意

INITIALIZE文でグループ項目(複数の項目をまとめたもの)を初期化すると、下位の項目もまとめて初期化されます。部分的に残したい値がある場合は、個別に初期化する方が安全です。

③ パフォーマンスに注意

大きなデータ構造を頻繁に初期化すると、処理が遅くなることがあります。初期化する回数を減らす工夫も大切です。

7. INITIALIZE文のまとめ方のコツ

7. INITIALIZE文のまとめ方のコツ
7. INITIALIZE文のまとめ方のコツ

複数の変数をまとめて初期化することで、コードをすっきり整理できます。例えば次のように書くと、複数のデータを一度にきれいにできます。


INITIALIZE WS-NAME WS-AGE WS-ADDRESS

プログラムの最初や、繰り返し処理のたびに初期化する場所をまとめておくと、ミスを減らすことができます。

8. 実際の開発での使いどころ

8. 実際の開発での使いどころ
8. 実際の開発での使いどころ

実務のCOBOLシステムでは、帳票処理やデータ更新など、同じ変数を何度も使うケースが多くあります。そんなときにINITIALIZEを使って変数をクリアにすることで、前回の処理結果が次の処理に影響しないようにできます。

たとえば、売上データを1件ずつ読み込む処理で、前の顧客名が残ってしまうと正しい結果になりません。そこで、ループの最初にINITIALIZE文を書いておくと、毎回リセットされ、正しい処理が行えます。

カテゴリの一覧へ
新着記事
C#で複数ファイルをまとめて操作する方法(foreach・LINQ)をやさしく解説!
C#のインターフェースとは?クラス設計を柔軟にする基本技術
C#のコンストラクタの役割と使い方!オブジェクト初期化の基本
COBOLでデータベース接続を理解しよう!初心者でもわかる基本の考え方
人気記事
No.1
Java&Spring記事人気No1
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.3
Java&Spring記事人気No3
C#の数値型をマスターしよう!int・double・decimalの違いと使い方
No.4
Java&Spring記事人気No4
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法