【COBOL学習|初心者向け】COBOLの知られざる伝統「レベル番号 77」を使いこなそう

導入:なぜ今さら77レベルなのか?

COBOLのプログラムを読んでいると、たまに「77」という見慣れない数字で始まる変数定義を見かけることはありませんか?これは「独立データ項目」と呼ばれるものです。現代のCOBOL開発では、わざわざ77を使わずに「01」レベルで変数を作るのが主流ですが、既存のシステムを保守する際には必ずと言っていいほど遭遇します。「なぜ存在するのか」「どう使うべきか」を理解しておくことは、レガシーコードの構造を正しく把握するために欠かせないスキルです。

基礎知識:77レベルとは何か?

COBOLのデータ定義において、レベル番号はデータの階層構造を示します。01が一番上の階層で、02、03と数字が増えるほど、その下位のグループ項目(集団項目)であることを意味します。
これに対し、「77」は「どの集団項目にも属さず、かつ自分自身も子項目を持たない」という、孤高の存在です。これを「独立データ項目」と呼びます。かつてはワーキングストレージセクションの先頭に書かなければならないという厳しい制約がありましたが、現在ではそのルールは撤廃されています。

実装:77レベルの正しい作法

77レベルを定義する際は、以下の点に注意してください。
・集団項目の一部にすることはできません。
・REDEFINES句(変数の再定義)を使用することはできません。
・あくまで「単一の値を保持する変数」として使用します。

現在は、01レベルで項目を定義する方が柔軟性が高いため、新規作成時に77を積極的に使う理由は少ないです。しかし、古いソースコードを修正する際には、その項目が「独立していること」を明示する役割を担っているため、あえてその形式を維持することもあります。

サンプルプログラム

以下は、77レベルを使用して一時的なカウンタやフラグを定義したサンプルコードです。コピーして動作を確認してみてください。

IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-77.

DATA DIVISION.
WORKING-STORAGE SECTION.

  • 77レベルは独立した変数として定義されます

77 WS-COUNT PIC 9(03) VALUE 0.
77 WS-STATUS-FLG PIC X(01) VALUE ‘N’.

PROCEDURE DIVISION.
> カウンタに値を加算する処理
ADD 1 TO WS-COUNT.

> フラグを立てる処理
MOVE ‘Y’ TO WS-STATUS-FLG.

DISPLAY “カウンタの値: ” WS-COUNT.
DISPLAY “ステータス: ” WS-STATUS-FLG.

STOP RUN.

応用・注意点:現場での判断基準

現場で遭遇する「77」をどう扱うか、ベテランからのアドバイスです。

1. 修正時のルールに従う
修正対象のプログラムが既に77を多用しているなら、それに倣って77で追加定義する方が可読性が保たれます。逆に、01ばかりのファイルなら、無理に77を使う必要はありません。

2. 誤った記述を避ける
時々、77レベルの下に02レベルの項目をぶら下げようとするコードを見かけますが、これは文法違反です。77はあくまで単体であることを忘れないでください。

3. 今後の設計指針
これから新しくプログラムを設計する場合は、77ではなく「01」を使用することをお勧めします。01であれば、将来的に項目のグループ化(構造体のような使い道)が必要になった際、スムーズに階層構造へ移行できるからです。

古いコードを恐れず、その歴史的背景を理解することで、あなたも一人前のCOBOLエンジニアへの階段をまた一つ登ることができますよ!

コメント

タイトルとURLをコピーしました