【COBOL学習|実務向け】COBOLの現代的活用:FUNCTION-IDとRETURNING句で実現する「関数化」の極意

1. 導入:なぜ今、FUNCTION-IDが必要なのか

業務システム開発の現場において、長年COBOLを扱っていると「似たような計算ロジックが複数のプログラムに散らばっている」という状況に直面することがあります。従来はCALL文で外部プログラムを呼び出し、引数に結果を格納する方法が一般的でしたが、これではコードが冗長になりがちです。
COBOLのFUNCTION-IDとRETURNING句を活用すれば、自作ロジックを「組み込み関数」のように扱えるようになります。これにより、計算式の中に直接ロジックを組み込めるため、可読性が劇的に向上し、保守の手間を削減することが可能です。

2. 基礎知識:FUNCTION-IDとRETURNING句の役割

一般的なPROGRAM-IDで定義されたモジュールは、CALL文で呼び出し、引数(USING句)を経由して値をやり取りする必要があります。一方、FUNCTION-IDで定義されたモジュールは、以下の特徴を持ちます。
関数呼び出し:式の中で関数名(引数)として記述できる。
RETURNING句:関数の戻り値を指定する。
これにより、複雑な計算式を1行で記述できるようになり、プログラム全体がスッキリと整理されます。

3. 実装と解決策

FUNCTION-IDを実装する際は、呼び出し元と呼び出し先の両方でその関数が「存在すること」をコンパイラに認識させる必要があります。特に、関数名が重複しないよう命名規則を徹底することが重要です。
処理の流れとしては、関数内で計算を行い、RETURNING句に指定したデータ項目に結果を格納します。呼び出し側は、その関数名を式の一部として評価するだけで値を受け取れます。

4. サンプルプログラム

以下の例は、2つの数値を加算して消費税を算出する実用的な関数です。

  • 関数側(FUNCTION-ID)

FUNCTION-ID. CALC-TAX-FUNCTION.
DATA DIVISION.
LINKAGE SECTION.
01 L-VAL-1 PIC 9(05).
01 L-VAL-2 PIC 9(05).
01 L-RESULT PIC 9(08) RETURNING.
PROCEDURE DIVISION USING L-VAL-1 L-VAL-2.

  • 2つの数値を加算し、消費税(1.1倍)を計算して返す

COMPUTE L-RESULT = (L-VAL-1 + L-VAL-2) 1.1.
GOBACK.
END FUNCTION CALC-TAX-FUNCTION.

  • 呼び出し側(メインプログラム)

WORKING-STORAGE SECTION.
01 WS-TOTAL PIC 9(08).
PROCEDURE DIVISION.

  • 式の中で直接関数を呼び出す

COMPUTE WS-TOTAL = CALC-TAX-FUNCTION(1000, 2000) + 500.
DISPLAY “計算結果: ” WS-TOTAL.
STOP RUN.

5. 応用・注意点:現場で陥りやすい罠

FUNCTION-IDを使用する際は、以下の点に注意してください。
再帰呼び出しの制限:使用しているコンパイラが再帰呼び出しをサポートしているか必ず確認してください。
パフォーマンス:極めて高い頻度で呼び出されるループ内で関数を多用すると、CALLに近いオーバーヘッドが発生する可能性があります。
デバッグの難易度:式の中で関数を呼び出すと、ステップ実行時に計算過程が追いにくくなる場合があります。複雑な計算式を1行に詰め込みすぎず、適度に関数を分割するのがベテランの知恵です。

この手法を適切に使いこなすことで、レガシーなCOBOLコードを「モダンで保守性の高い資産」へと変貌させることができます。ぜひ次回の機能追加の際に試してみてください。

コメント

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