【COBOL学習|実務向け】COBOLにおける「FUNCTION-ID」の活用:手続き型から関数型思考への転換

導入:なぜ今、FUNCTION-IDなのか

長年COBOLに携わっていると、「同じ処理を複数のプログラムで使い回したい」という場面に何度も遭遇します。COPY句でソースを埋め込む手法は伝統的ですが、保守性が悪化しがちです。そこで活用したいのが「FUNCTION-ID」です。これを使うことで、COBOLプログラムを標準的な「関数」として定義でき、可読性の高いコードベースを構築できます。特にバッチ処理の共通部品化において、劇的な効果を発揮します。

基礎知識:FUNCTION-IDとプログラムの静的構造

COBOL 2002以降の規格で導入されたFUNCTION-IDは、従来のPROGRAM-IDに代わるものです。最大の特徴は、Procedure Divisionで計算した結果を「RETURNING句」を介して直接呼び出し元に返せる点です。

通常、COBOLでは引数として値を渡し、引数経由で結果を受け取るのが一般的ですが、これだと値の受け渡し専用の領域(Working-Storage)を意識しすぎる必要がありました。FUNCTION-IDを使えば、他の高級言語のように「値 = 関数名(引数)」という直感的な記述が可能になります。

実装・解決策:関数定義の手順

FUNCTION-IDを実装する際は、以下の点に注意してください。
1. PROGRAM-IDの代わりにFUNCTION-IDを記述する。
2. PROCEDURE DIVISIONにRETURNING句を定義する。
3. 呼び出し側では、通常のCALL文ではなく、組み込み関数と同様の形式で呼び出す。

サンプルプログラム:消費税計算関数

以下は、金額を渡すと消費税込みの金額を返す単純な関数例です。

IDENTIFICATION DIVISION.
FUNCTION-ID. CALC-TAX.

DATA DIVISION.
LINKAGE SECTION.
01 IN-PRICE PIC 9(8).
01 OUT-PRICE PIC 9(8).

PROCEDURE DIVISION USING BY VALUE IN-PRICE RETURNING OUT-PRICE.

  • 消費税10%を計算(端数切り捨て)

COMPUTE OUT-PRICE = IN-PRICE 1.10.
GOBACK.
END FUNCTION CALC-TAX.

  • — 呼び出し側のイメージ —
  • COMPUTE TOTAL-PRICE = FUNCTION CALC-TAX(PRICE).

応用・注意点:現場での運用における落とし穴

現場でFUNCTION-IDを導入する際は、以下の3点に注意してください。

1. コンパイラの対応状況
古いオフコンやメインフレーム環境では、最新のCOBOL規格に対応していない場合があります。必ず使用する環境が「COBOL 2002」以降の規格をサポートしているか確認してください。

2. エラー処理の設計
関数は値を返すのが本分ですが、計算エラーや異常値が入力された場合のハンドリングをどうするか、設計段階で決めておく必要があります。場合によっては、返り値以外に「ステータスコード」を返す設計が必要になるかもしれません。

3. 呼び出しの制限
FUNCTION-IDで定義した関数は、再帰呼び出しが可能か、あるいはマルチスレッド環境下での並列実行が可能かといった「再入可能性(リエントラント)」についても考慮が必要です。静的な領域(Working-Storage)を安易に書き換える設計にすると、予期せぬバグの温床になります。

まずは小さな計算ロジックからFUNCTION-ID化を進め、コードの疎結合化を体験してみてください。保守のストレスが驚くほど軽減されるはずです。

コメント

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