COBOLのRETURNINGを使ったサブルーチンの戻り値受け渡しを完全解説!初心者でもやさしく理解
生徒
「先生、サブルーチンで処理結果を戻り値みたいに使う方法ってありますか?」
先生
「はい、それがRETURNINGを使った戻り値の仕組みです。わかりやすく説明しますね。」
生徒
「戻り値って聞くと難しそうですが、イメージで教えてほしいです!」
先生
「もちろんです。例えば自動販売機のように『お金を入れるとおつりが返ってくる』イメージで説明しますね。」
1. RETURNINGとは?
RETURNINGは、COBOLのサブルーチン(別プログラム)から特定の処理結果(戻り値)を受け取る方法です。メインプログラムに「値を返す」ための仕組みで、わかりやすく言えば「おつり返却」です。
サブルーチンに値を渡す方法は以前学んだUSINGでしたが、RETURNINGは“結果だけを渡す”ときに便利です。
2. RETURNINGのメリット
RETURNINGを使うことで、次のメリットがあります:
- メインプログラム側の
WORKING-STORAGE変数に結果がすっきり収まる - パラメータ受け渡しよりシンプルで、戻り値だけ受け取る想定が明確
- プログラムを見たとき「この処理は何を返すのか」がわかりやすい
呼び出し元と戻り値変数が指定されていて、コードが見やすく整理できます。
3. RETURNINGを使った基本例
では、例を見てみましょう。「2つの数値を足して結果を受け取る」サブルーチンを作ります。
IDENTIFICATION DIVISION.
PROGRAM-ID. MAINPROG.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM1 PIC 9(3) VALUE 10.
01 NUM2 PIC 9(3) VALUE 20.
01 SUM-RESULT PIC 9(4).
PROCEDURE DIVISION.
CALL 'ADD-PROG' USING NUM1 NUM2 RETURNING SUM-RESULT
DISPLAY "合計は " SUM-RESULT " です。"
STOP RUN.
IDENTIFICATION DIVISION.
PROGRAM-ID. ADD-PROG.
DATA DIVISION.
LINKAGE SECTION.
01 A-IN PIC 9(3).
01 B-IN PIC 9(3).
PROCEDURE DIVISION USING A-IN B-IN RETURNING SUM-OUT.
ADD A-IN TO B-IN GIVING SUM-OUT
EXIT PROGRAM.
実行結果の例:
合計は 30 です。
この例では、SUM-RESULTに戻り値が格納され、メインプログラムで使われます。
4. RETURNINGの使い方と注意点
RETURNINGを使う際のポイントは以下のとおりです:
- 呼び出し元:
CALL 'サブルーチン名' ... RETURNING 変数と書く - サブルーチン側:
PROCEDURE DIVISION USING ... RETURNING 戻り値変数と書く - データ型の一致:返す値と受け取る変数の型が同じである必要がある
- EXIT PROGRAMでサブルーチンを終了させる
この仕組みを使うことで、サブルーチン処理と結果保存がわかりやすく分かれ、コードがすっきりします。
5. RETURNINGとUSINGの比較
USINGもCALLで使える大切な仕組みですが、役割が少し違います:
- USING:サブルーチンに「値を渡す(入力)」ときに使う
- RETURNING:サブルーチンから「結果を返す(出力)」ときに使う
たとえばUSINGで入力値を渡し、RETURNINGで処理結果を受け取る――この組み合わせで、サブルーチンは入力と出力の両方をスマートに行えます。
6. 実践での活用場面
RETURNINGは特に「計算結果」や「判定結果」を取得するのに便利です。例えば:
- 税率をかけて税込価格を返す
- 年齢から成人判定(true/false)を返す
- 文字列を整形して返す
こうした動きがサブルーチンで簡潔に書けるため、メインプログラムが見通しやすくなります。
まとめ
COBOLのRETURNINGは、サブルーチンから戻り値を受け取るための便利な仕組みであり、メインプログラムとサブルーチンの役割をより明確に分離できる点が大きな特徴です。今回の記事で扱った内容を振り返ると、RETURNINGは「結果だけを返す」という場面でとても役立ち、USINGと併用することで入力値と出力値を整理して扱えるようになります。とくにCOBOLでは業務処理が複雑化しやすく、サブルーチンをどれだけ明確に構造化できるかがプログラム全体の読みやすさや保守性に直結するため、RETURNINGの理解は実務でも大きな武器になります。 たとえば、税計算や合計値の算出、文字列整形など、ひとつの結果だけを返したい処理ではRETURNINGがシンプルで扱いやすく、コードを見たときにも「何を返しているのか」がひと目でわかるため、初心者にも負担が少なく理解しやすい構造を作れます。また、サブルーチン側でEXIT PROGRAMを用いて終了させること、LINKAGE SECTIONに定義した変数とRETURNINGの戻り値の型を一致させることなど、RETURNINGを正しく使ううえで欠かせない基本事項も押さえておく必要があります。 RETURNINGを使いこなすことで、COBOLプログラムの整理は一段と進み、メインプログラムがすっきり見やすくなります。特に大規模な業務システムでは、数十、数百ものサブルーチンが存在することも珍しくありません。その中で、計算結果や判定結果を明確に返す仕組みは保守担当者にとっても非常に助かるものとなり、バグの発見や修正も容易になります。以下には記事内容を踏まえて、RETURNINGを使ったサンプルコードをまとめとして掲載していますので、復習の際や自分でコードを書くときの参考に活用してください。
サンプルプログラム(まとめ)
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN-RETURN-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRICE PIC 9(5) VALUE 1000.
01 TAX-RATE PIC 9(2) VALUE 10.
01 TAXED-PRICE PIC 9(6).
PROCEDURE DIVISION.
CALL 'CALC-TAX' USING PRICE TAX-RATE RETURNING TAXED-PRICE
DISPLAY "税込価格は " TAXED-PRICE " 円です。"
STOP RUN.
IDENTIFICATION DIVISION.
PROGRAM-ID. CALC-TAX.
DATA DIVISION.
LINKAGE SECTION.
01 L-PRICE PIC 9(5).
01 L-TAX-RATE PIC 9(2).
01 RESULT PIC 9(6).
PROCEDURE DIVISION USING L-PRICE L-TAX-RATE RETURNING RESULT.
COMPUTE RESULT = L-PRICE + (L-PRICE * L-TAX-RATE / 100)
EXIT PROGRAM.
このように、RETURNINGは「結果をひとつ返す」処理と非常に相性が良く、計算処理だけでなく判定処理などにも応用できます。USINGで受け取った値を用いて処理し、その結果をRETURNINGで返すことで、サブルーチン内部の処理内容が整理され、メインプログラムは必要な結果を受け取って次の処理に進むだけというシンプルな構造が実現します。 実際のシステム開発では、RETURNINGを活用するとメインプログラムの可読性が向上し、他の開発者がコードを読み解くときにも理解しやすくなります。値の受け渡し規則が明快であるため、データの流れを追いやすく、誤った値参照によるバグも減らせる点が大きな利点です。とくにCOBOLのように長年運用される業務プログラムでは、最初の構造がどれだけ整っているかでシステム寿命が変わることもあります。RETURNINGを適切に扱うことは、安全性・保守性・見通しの良さという要素を支える大切なスキルです。 繰り返し練習し、自分でもサブルーチンを作って結果を返す処理を書いてみることで、RETURNINGの動きが自然と理解でき、より効率的なCOBOLプログラムを組めるようになります。
生徒「RETURNINGって、結果をそのまま受け取れるからとても便利だと感じました!」
先生「そうだね。USINGと併用すれば入力と出力が分かりやすく整理されて、プログラムの流れも掴みやすくなるよ。」
生徒「EXIT PROGRAMで終わる理由も理解できました。RETURNINGで返す値も型を揃える必要があるんですね。」
先生「その通り。そこがきちんと揃っていないと正しい値が返らないから、必ず確認する習慣をつけよう。」
生徒「今度は計算だけでなく、判定処理をRETURNINGで返すサブルーチンも作ってみたいです!」
先生「とても良いね。実務でもRETURNINGはよく使われるから、慣れておくと必ず役に立つよ。自分の手でどんどん書いて身につけていこう。」