【COBOL学習|初心者向け】COBOLのCALL文をスマートに!RETURNING句で戻り値を受け取る方法

導入:なぜRETURNING句が重要なのか

COBOLでプログラムを呼び出す際、これまでは「呼び出し先で何が起きたか」を知るために、特殊レジスタであるRETURN-CODEを使ってきました。しかし、RETURN-CODEは「整数型」しか扱えないという大きな制限があります。もし、計算結果が小数だったり、複雑なデータ構造(ポインタ)を戻したい場合はどうすればよいでしょうか?
ここで登場するのがRETURNING句です。これを使うことで、まるで他のプログラミング言語の関数のように、戻り値をスマートかつ型を問わずに受け取ることが可能になります。

基礎知識:RETURNING句の仕組み

RETURNING句は、CALL文の中で「呼び出し先が返した値を直接格納する場所を指定する」ための構文です。
従来のRETURN-CODEは、システム全体で共有される「入れ物」のようなもので、意図せず値が書き換わってしまうリスクがありました。一方、RETURNING句を使えば、呼び出し元で準備した専用の変数に直接結果が代入されるため、安全かつ明示的にデータのやり取りができます。

実装:RETURNING句の使い方

呼び出し先のプログラム(サブプログラム)側でも、PROCEDURE DIVISIONのヘッダで「GIVING」を指定する必要があります。これにより、呼び出し元と呼び出し先の双方で、戻り値の受け渡しが正しく定義されます。

サンプルプログラム

以下のコードは、呼び出し先で計算した結果を受け取る例です。

【呼び出し元(メインプログラム)】
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN-PROG.
WORKING-STORAGE SECTION.
01 WS-RESULT PIC S9(9)V99.
PROCEDURE DIVISION.
> 呼び出し先CALCを呼び出し、結果をWS-RESULTに格納する
CALL “CALC” RETURNING WS-RESULT.
DISPLAY “計算結果は: ” WS-RESULT.
STOP RUN.

【呼び出し先(サブプログラム:CALC)】
IDENTIFICATION DIVISION.
PROGRAM-ID. CALC.
> GIVING句で戻り値を指定する
PROCEDURE DIVISION RETURNING RET-VAL.
01 RET-VAL PIC S9(9)V99.
> 計算処理を実行して値を戻す
COMPUTE RET-VAL = 123.45 2.
EXIT PROGRAM.

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

1. 型の一致を確認する:呼び出し元で定義した変数の型(PIC句)と、呼び出し先でGIVINGに指定した変数の型は必ず一致させてください。型がずれていると、予期せぬ数値化けの原因になります。
2. RETURN-CODEとの併用:RETURNING句を使っても、RETURN-CODEが自動的にゼロになるわけではありません。エラー判定としてRETURN-CODEを使い、計算結果としてRETURNING句を使うといった使い分けが現場では一般的です。
3. ポインタの受け渡し:応用として、アドレス(ポインタ)を戻すことも可能です。大きな構造体やリストを扱う際は、値をコピーするのではなくアドレスを渡すことで、メモリ効率を大幅に向上させることができます。

RETURNING句を使いこなして、よりモダンで保守性の高いCOBOLプログラムを目指しましょう!

コメント

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