COBOLのREDEFINESを使ったデータ再定義の仕組みとは?初心者にもわかるやさしい解説
生徒
「先生、COBOLのREDEFINES(リディファインズ)って何に使うんですか?なんだか難しそうです……」
先生
「いい質問ですね。REDEFINESは、一つのデータ領域を別の形で再利用できる仕組みなんですよ。」
生徒
「ひとつの変数を、違う形でも使えるってことですか?」
先生
「そうです!身近な例を使ってわかりやすく説明しますね。」
1. REDEFINESとは?COBOLの再定義を理解しよう
COBOLのREDEFINES(リディファインズ)は、ひとつのメモリ領域(変数の記憶場所)を、複数の形式で使い分けるための機能です。英語の“redefine”は「再定義する」という意味があり、COBOLでもまさにこの意味で使われます。
たとえば、ひとつの変数に文字列データを入れたり、数値データとして扱ったりすることができます。同じデータを目的に応じて違う形で使いたい時にとても便利です。
2. REDEFINESの具体的な例を見てみよう
ここでは、REDEFINESを使った簡単なサンプルを紹介します。たとえば、4桁の郵便番号と、2つに分けた市区町村コードと町域コードを同じメモリ領域に持たせる場合などに活用できます。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-REDEFINES.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ZIP-CODE-AREA PIC X(4) VALUE "1234".
01 LOCATION-DETAILS REDEFINES ZIP-CODE-AREA.
05 CITY-CODE PIC X(2).
05 TOWN-CODE PIC X(2).
PROCEDURE DIVISION.
DISPLAY "郵便番号: " ZIP-CODE-AREA
DISPLAY "市コード: " CITY-CODE
DISPLAY "町コード: " TOWN-CODE
STOP RUN.
このプログラムでは、ZIP-CODE-AREA
が元の変数で、LOCATION-DETAILS
はその再定義です。つまり、同じ4文字分の領域を使って、CITY-CODE
とTOWN-CODE
という形に分けて使っているのです。
実行結果
郵便番号: 1234
市コード: 12
町コード: 34
このように、元の変数の中身を、別の構造で見直すことができるのがREDEFINESの大きな特徴です。
3. REDEFINESのルールと注意点
REDEFINESを使うときは、いくつかのルールと注意点があります。
- 同じレベル番号(たとえば01レベルなど)で宣言されたデータにしか使えません。
- REDEFINESを使う側が、元の変数のすぐ後に続けて書かれる必要があります。
- REDEFINESを使うと、どちらか一方しか有効にならない(同じメモリを使っているため)ので、片方に値を入れるともう一方の中身も変わります。
REDEFINESはとても便利な機能ですが、意図せずデータが上書きされることがあるため、使い方には注意が必要です。
4. 実生活でのREDEFINESのイメージ
プログラミング初心者でも理解しやすいように、REDEFINESを実生活に例えてみましょう。
たとえば、「お財布」に1000円入っていたとします。これは数字として「1000」と見えます。でも、別の見方をすると、「500円玉が2枚」や「100円玉が10枚」と見えるかもしれません。
このように、「同じお金(データ)を、別の視点(形式)で見ている」状態が、REDEFINESの考え方とよく似ています。
5. 文字列と数値の再定義例
もう一つの例として、文字列と数値の変換にREDEFINESを使うケースを見てみましょう。以下のように、文字列として受け取ったデータを数値に変換せず、そのまま再定義して扱うことができます。
01 INPUT-DATA PIC X(4) VALUE "0050".
01 NUMERIC-VALUE REDEFINES INPUT-DATA PIC 9(4).
PROCEDURE DIVISION.
DISPLAY "文字列データ: " INPUT-DATA
DISPLAY "数値としての扱い: " NUMERIC-VALUE
STOP RUN.
実行結果
文字列データ: 0050
数値としての扱い: 0050
この例では、INPUT-DATA
は文字列(X型)ですが、NUMERIC-VALUE
は数値(9型)として再定義しています。実際には同じ値を使っていますが、使う時に「数値」として扱いたいのか、「文字列」として表示したいのかによって、REDEFINESを使い分けられるのです。
6. なぜREDEFINESが使われるのか?
REDEFINESは、限られたメモリ資源を効率よく使うために設計された機能です。昔のコンピュータは今ほどメモリが豊富ではなかったため、同じ領域を別の意味で使いまわすという工夫が求められました。
現代のシステムでも、ファイル形式や外部データとの連携で、同じデータをさまざまな角度で処理したい場面があります。そのため、REDEFINESは今でも現役で使われている大事な機能です。
7. REDEFINESと他のCOBOL機能の関係
REDEFINESは、COBOLの変数定義(DATA DIVISION)の中で使う重要な構文のひとつです。この機能を理解することで、COBOLのデータ型や構造の仕組みがさらに深くわかるようになります。
また、ファイルデータを読み込んだあとに形式を変える場面や、異なるフォーマットのデータを共通で扱う場面などでREDEFINESは非常に役立ちます。