はじめに
COBOLプログラムを書いていると、たくさんの「名前」が出てきますよね。例えば、データを格納する場所の名前(データ名)や、処理のまとまりを示す名前(段落名、節名)などです。これらを総称して「利用者定義語」と呼びます。利用者定義語を適切に使うことは、プログラムの可読性を高め、後から他の人が読んだり、自分で修正したりする際に、バグを減らすために非常に重要です。特に、データ名や段落名が分かりにくいと、プログラムの全体像を把握するのに時間がかかり、思わぬミスにつながることも少なくありません。
利用者定義語って何?
利用者定義語とは、プログラマーが自分でプログラム内で使用する「名前」のことです。COBOLでは、主に以下の3種類があります。
- データ名 (Data Names): 変数や構造体などのデータを格納する場所の名前です。例えば、顧客の名前を格納する場所なら `CUSTOMER-NAME` のような名前を付けます。
- 段落名 (Paragraph Names): プログラムの処理を論理的に区切るための名前です。例えば、顧客情報を読み込む処理のまとまりに `READ-CUSTOMER-INFO` といった名前を付けます。
- 節名 (Section Names): 段落名よりも大きな処理のまとまりを示す名前です。
これらの利用者定義語には、いくつかルールがあります。
- 最大30文字まで使用できます。
- 英文字(A~Z)、数字(0~9)、ハイフン(-)が使用できます。
- 少なくとも1文字以上の英文字を含まなければなりません。これは、プログラムの構造を明確にし、誤解を防ぐための重要なルールです。
- ただし、段落名と節名に限り、歴史的な例外として数字のみの名前も許容される場合がありますが、可読性の観点からは英文字を含めることを強く推奨します。
例えば、 `01 CUSTOMER-NAME-DATA-AREA.` という行は、 `CUSTOMER-NAME-DATA-AREA` というデータ名を定義しています。このように、ハイフンを使って単語を繋げると、意味が分かりやすくなりますね。
実践!利用者定義語の付け方
利用者定義語を分かりやすく付けるためのコツをいくつかご紹介します。
1. 意味が分かる名前を付ける: その名前が何を表しているのか、一目で分かるようにしましょう。例えば、単に `A` や `B` といった抽象的な名前ではなく、 `ORDER-AMOUNT` や `TOTAL-PRICE` のように具体的な名前を付けます。
2. 一貫した命名規則を使う: プログラム全体で、同じような意味を持つものには似たような命名規則を適用します。例えば、金額を表すデータ名には常に `AMOUNT` や `PRICE` といった単語を含める、といったルールです。
3. ハイフンを活用する: 複数の単語を組み合わせる場合は、ハイフンで繋げると読みやすくなります。 `CUSTOMER-ORDER-ID` のように、単語ごとに区切られていると、意味を理解しやすくなります。
4. 長すぎず、短すぎず: 30文字以内という制限がありますが、あまりに長すぎると入力が大変になったり、行からはみ出したりします。逆に短すぎると意味が伝わりにくくなります。
サンプルプログラム
ここでは、簡単なデータ定義と段落定義で利用者定義語を使ってみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. USER-DEFINED-WORDS-EXAMPLE.
- このプログラムは、利用者定義語の基本的な使い方を示します。
- データ名、段落名、節名が含まれています。
DATA DIVISION.
WORKING-STORAGE SECTION.
- 顧客の名前を格納するデータ領域を定義します。
01 CUSTOMER-INFO.
05 CUSTOMER-ID PIC X(10).
05 CUSTOMER-NAME PIC X(50).
05 ORDER-AMOUNT PIC 9(7)V99.
PROCEDURE DIVISION.
- メイン処理の開始
MAIN-PROCEDURE.
PERFORM INITIALIZE-DATA.
PERFORM PROCESS-CUSTOMER-ORDER.
PERFORM DISPLAY-RESULT.
STOP RUN.
- データ初期化処理
INITIALIZE-DATA.
MOVE ‘C001’ TO CUSTOMER-ID.
MOVE ‘山田 太郎’ TO CUSTOMER-NAME.
MOVE 1234567.89 TO ORDER-AMOUNT.
DISPLAY ‘データ初期化完了’.
- 顧客注文処理
PROCESS-CUSTOMER-ORDER.
DISPLAY ‘顧客注文処理中…’.
- ここに実際の注文処理ロジックが入ります
DISPLAY ‘顧客注文処理完了’.
- 結果表示処理
DISPLAY-RESULT.
DISPLAY ‘— 処理結果 —‘.
DISPLAY ‘顧客ID: ‘ CUSTOMER-ID.
DISPLAY ‘顧客名: ‘ CUSTOMER-NAME.
DISPLAY ‘注文金額: ‘ ORDER-AMOUNT.
- プログラム終了
END-PROGRAM.
EXIT.
このサンプルでは、 `CUSTOMER-INFO` という構造体の中に、 `CUSTOMER-ID`、 `CUSTOMER-NAME`、 `ORDER-AMOUNT` というデータ名を定義しています。また、 `PROCEDURE DIVISION` では、 `MAIN-PROCEDURE`、 `INITIALIZE-DATA`、 `PROCESS-CUSTOMER-ORDER`、 `DISPLAY-RESULT` といった段落名を使って、処理の流れを分かりやすくしています。
応用・注意点
- 予約語との衝突に注意: COBOLには `MOVE` や `ADD` のように、コンパイラが特別な意味を持つと認識する「予約語」があります。利用者定義語は、これらの予約語と同じ名前にはできません。もし同じ名前にしてしまうと、意図しない動作を引き起こす可能性があります。
- 数字だけの段落名・節名: 前述の通り、段落名や節名には数字だけの名前も許容される場合がありますが、これは古いプログラムで見かけることがあります。新しいプログラムでは、英文字を含めることで、より明確で保守しやすいコードになります。
- 小文字の扱い: COBOLの利用者定義語は、一般的に大文字・小文字を区別しません。しかし、可読性を高めるために、一貫して大文字で記述することが推奨されます。
利用者定義語を上手に使うことで、COBOLプログラムの「顔」とも言える部分が整い、ぐっと読みやすく、保守しやすくなります。ぜひ、日々のコーディングで意識してみてください。

コメント