【COBOL学習|初心者向け】複雑な計算をスッキリと!モダンCOBOLの「利用者定義関数」活用術

1. 導入:なぜ「利用者定義関数」が必要なのか

COBOLの現場でよくある悩みといえば、「似たような計算ロジックが、あちこちのプログラムに散らばっている」ことではないでしょうか。これまでは、共通の処理をサブルーチン(CALL文)として呼び出すのが一般的でしたが、計算結果を値として直接受け取りたい場合、少し記述が冗長になりがちでした。
今回紹介する「利用者定義関数(FUNCTION-ID)」を使えば、算術式や条件式の中に組み込める「自分だけの関数」を作ることができます。これにより、コードの可読性が格段に上がり、バグの混入も防げるようになります。

2. 基礎知識:FUNCTION-IDとは?

モダンCOBOL(COBOL 2002以降)で導入された「利用者定義関数」とは、その名の通り、開発者が独自に定義できる関数です。
通常のプログラム(CALLされる側)と決定的に違う点は、「式の中で直接使える」ことです。例えば、組込関数の「FUNCTION SQRT」のように、`COMPUTE A = FUNCTION GET-TAX(PRICE)` といった形で呼び出すことができます。これにより、ロジックを部品化し、数式のようにスマートに記述できるようになります。

3. 実装と解決策

利用者定義関数を作成するには、プログラムのIDENTIFICATION DIVISIONの直後に「FUNCTION-ID」を記述します。
ポイントは以下の3点です。
1. FUNCTION-ID句を使って関数名を定義する。
2. DATA DIVISIONのLINKAGE SECTIONで引数(USING)と戻り値(RETURNING)を定義する。
3. 呼び出し元では、FUNCTIONキーワードを付けて呼び出す。

4. サンプルプログラム

以下は、税込価格を計算するシンプルな関数の例です。

IDENTIFICATION DIVISION.
FUNCTION-ID. GET-TAX-AMOUNT.

  • 税込価格を計算して戻す関数

DATA DIVISION.
LINKAGE SECTION.
01 L-PRICE PIC 9(7).
01 L-TAX-RATE PIC V99.
01 L-TAX-AMT PIC 9(7).

PROCEDURE DIVISION USING L-PRICE L-TAX-RATE RETURNING L-TAX-AMT.

  • 計算ロジック:価格 税率を算出し、戻り値にセットする

COMPUTE L-TAX-AMT = L-PRICE (1 + L-TAX-RATE)
GOBACK.
END FUNCTION GET-TAX-AMOUNT.

  • — 呼び出し側のイメージ —
  • COMPUTE TOTAL-PRICE = FUNCTION GET-TAX-AMOUNT(1000 0.10)
  • DISPLAY “税込価格は ” TOTAL-PRICE ” です”

5. 応用・注意点

現場で使う際に最も注意すべきは「副作用」です。利用者定義関数はあくまで計算や値の取得に徹するべきで、関数の内部で外部のファイルに書き込んだり、グローバルな変数を不用意に書き換えたりするのは避けましょう。これを行うと、デバッグが非常に困難になります。
また、エラーハンドリングについても意識してください。関数内で例外が発生した場合の挙動を考慮し、呼び出し元に適切な値を返せるような設計を心がけることが、ベテランへの第一歩です。ぜひ、日々の開発で「計算の共通化」に挑戦してみてください。

コメント

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