COBOL言語の「USING句」でパラメータの引渡しをしよう! | 用語辞典

COBOL(コボル)言語の予約語USINGを使ったパラメータの引渡しとは

辞典・辞書-USING-イメージ

COBOL(コボル)言語のUSING句とは?

USING(英語)は、USEの現在進行形で、日本語に訳すると「使用している」という意味です。

COBOL(コボル)言語のUSING句には、プログラム間でパラメータを引き渡せる機能があります。

USING句の形式

USING句は、呼び出し元プロフラムと呼び出し先プログラムの両方に指定することにより、プログラム間でパラメータの引渡しができるようになります。

■書式1:呼び出し元プログラム

 CALL 呼び出し先プログラム名 USING 受け渡し方法 パラメータ1 [パラメータ2…]

■構文規則

 <呼び出し先プログラム名>

  呼び出して実行させるプログラムの名前を文字定数、英数字データ項目で指定します。

 <受け渡し方法>

  受け渡し方法は省略が可能で、「BY CONTENT」、または「BY REFERENCE」を指定することができ、受け渡し方法を省略した場合は、「BY REFERENCE」が指定されたものとみなされます。「BY CONTENT」を指定すると、パラメータが値渡しとなり呼び出し先プログラムで値を変更することはできません。「BY REFERENCE」を指定すると、パラメータが参照渡しとなり呼び出し先プログラムで値を変更することができます。

 <パラメータ1 パラメータ2>

  呼び出し先プログラムに引き渡すパラメータを指定します。パラメータの定義は01項目、または77項目でなければなりません。パラメータ2以降は省略が可能ですが、各パラメータは呼び出し先プログラムと、データの型や長さが一致している必要があります。

■使用例

 USING句を使用し、副プログラムを呼び出すプログラム例をご紹介します。

 このプログラムは、値の変更が可能なパラメータを1つ指定して副プログラムを呼び出し、変更されたパラメータの値を表示するプログラムです。

辞典・辞書-USING-使用例

※サンプルプログラムのコンパイル環境は、cobc(GunCOBOL)2.0.0です。コンパイル環境の違いによっては、13行目の定義でコンパイルエラーが発生する場合があります。コンパイルエラーが発生する場合は桁数を増やしてください。

■実行結果

 実行結果は、「書式2:呼び出し先プログラム」の実行結果をご参照ください。

■書式2:呼び出し先プログラム

 PROCEDURE DIVISION USING パラメータ1 [パラメータ2…]

■構文規則

 <パラメータ1 パラメータ2>

  呼び出し元プログラムから引き渡されるパラメータを指定します。パラメータはLINKAGE SECTIONで、01項目、または77項目で定義しなければなりません。パラメータ2以降は省略が可能ですが、各パラメータは呼び出し元プログラムと、データの型や長さが一致している必要があります。

■使用例

 USING句を使用し、主プログラムから呼び出される副プログラムのプログラム例をご紹介します。

 このプログラムは、呼び出されると、2つの整数値(いずれも1桁)の入力を促すメッセージを表示し、入力された2つの整数値を加算し、加算結果をパラメータに格納して、呼び出し元プログラムに制御を戻すプログラムです。

辞典・辞書-USING-使用例

■実行結果

実行結果は、「書式1:呼び出し元プログラム」のサンプルプログラムから、本サンプルプログラムを実行した結果です。

はじめに2個の1桁の整数値の入力を促すメッセージが表示されます。

辞典・辞書-USING-実行結果

整数の1と2を入力してみます。

辞典・辞書-USING-入力例

計算結果が表示され、プログラムが終了しました。

USING句のCOBOL(コボル)言語における基本事項やルールについて

USING句は、呼び出し元プログラムと呼び出し先プログラムの間で受け渡すパラメータを指定する句です。パラメータとなるデータ項目は、呼び出し元プログラムではWORKING-STORAGE SECTIONで定義し、呼び出し先プログラムではLINKAGE SECTIONで定義します。

COBOL(コボル)言語のUSING句を使うときの注意点

USING句で指定するパラメータは、呼び出し元プログラムと呼び出し先プログラムで、データ項目の型や長さが一致している必要があり、一致していない場合、実行時にエラーが発生したり、予期しない動作をしたりしますので注意が必要です。

USING句を使ったCOBOL(コボル)プログラムの活用方法

USING句では、呼び出し元プログラムで受け渡し方法をパラメータごとに指定することにより、呼び出し先プログラムの不具合などでパラメータに指定したデータ項目が破壊されることを防ぐことができます。

では、呼び出し元プログラムで受け渡し方法を指定し、1番目と2番目のパラメータをINパラメータとして変更できないようにし、3番目のパラメータをOUTパラメータとして変更可能なプログラム例をご紹介します。

ご紹介するプログラム例は、「COBOL(コボル)言語のUSING句とは?」でご紹介したサンプルプログラムと同じ機能を、異なるコーディングで実現したものです。

■呼び出し元プログラム

   
  1. ******************************************************************
  2. * Author:
  3. * Date:
  4. * Purpose:
  5. * Tectonics: cobc
  6. ******************************************************************
  7. IDENTIFICATION DIVISION.
  8. PROGRAM-ID. USING_SAMPLE3.
  9. DATA DIVISION.
  10. FILE SECTION.
  11. WORKING-STORAGE SECTION.
  12. 01 WORKING-AREA.
  13. 03 DISPLAY-BUF PIC X(30).
  14.  
  15. *パラメータ
  16. 01 SUJI1 PIC 9(1).
  17. 01 SUJI2 PIC 9(1).
  18. 01 KEKKA PIC 9(3).
  19.  
  20. *-------------------------------------------
  21. * 主手続
  22. *-------------------------------------------
  23. PROCEDURE DIVISION.
  24.  
  25. MAIN-PROCEDURE.
  26. * コンソール入力エリアの初期化
  27. MOVE ZERO TO SUJI1.
  28. MOVE ZERO TO SUJI2.
  29.  
  30. EXEC-DISPLAY-INPUT-PROC.
  31. * コンソール表示&入力
  32. DISPLAY "足し算をします。".
  33. DISPLAY "0から9の整数値を2つ入力してください。".
  34.  
  35. * 0~9以外が入力された場合、コンソール表示&入力を繰り返す
  36. ACCEPT SUJI1 FROM CONSOLE.
  37. IF (SUJI1 < 0) OR
  38. (SUJI1 > 9) THEN
  39. DISPLAY "入力値が誤っています"
  40. GO TO EXEC-DISPLAY-INPUT-PROC
  41. END-IF.
  42.  
  43. ACCEPT SUJI2 FROM CONSOLE.
  44. IF (SUJI2 < 0) OR
  45. (SUJI2 > 9) THEN
  46. DISPLAY "入力値が誤っています"
  47. GO TO EXEC-DISPLAY-INPUT-PROC
  48. END-IF.
  49.  
  50. * 入力値の加算(副プログラムの実行)
  51. CALL "USING_SAMPLE4" USING BY CONTENT SUJI1 SUJI2
  52. BY REFERENCE KEKKA.
  53.  
  54. * 加算結果の表示
  55. MOVE SPACE TO DISPLAY-BUF.
  56. STRING "計算結果=" KEKKA DELIMITED BY SPACE INTO DISPLAY-BUF.
  57. DISPLAY DISPLAY-BUF.
  58.  
  59. STOP RUN.
  60. END PROGRAM USING_SAMPLE3.

※サンプルプログラムのコンパイル環境は、cobc(GunCOBOL)2.0.0です。コンパイル環境の違いによっては、13行目の定義でコンパイルエラーが発生する場合があります。コンパイルエラーが発生する場合は桁数を増やしてください。

■呼び出し先プログラム

   
  1. ******************************************************************
  2. * Author:
  3. * Date:
  4. * Purpose:
  5. * Tectonics: cobc
  6. ******************************************************************
  7. IDENTIFICATION DIVISION.
  8. PROGRAM-ID. USING_SAMPLE4.
  9. DATA DIVISION.
  10.  
  11. LINKAGE SECTION.
  12. 01 SUJI1 PIC 9(1).
  13. 01 SUJI2 PIC 9(1).
  14. 01 KEKKA PIC 9(3).
  15.  
  16. *-------------------------------------------
  17. * 主手続
  18. *-------------------------------------------
  19. PROCEDURE DIVISION USING SUJI1 SUJI2 KEKKA.
  20. MAIN-PROCEDURE.
  21. COMPUTE KEKKA = SUJI1 + SUJI2.
  22. EXIT.
  23. END PROGRAM USING_SAMPLE4.

■実行結果

はじめに2個の1桁の整数値の入力を促すメッセージが表示されます。

辞典・辞書-USING-実行結果

整数の1と2を入力してみます。

辞典・辞書-USING-入力例

「COBOL(コボル)言語のUSING句とは?」でご紹介したサンプルプログラムと全く同じように計算結果が表示され、プログラムが終了しました。

COBOL言語に限らず、どの言語でも1つのプログラムで、お客さまが要求する仕様を実現することは難しく、プログラムの機能分割は必然です。分割した機能(プログラム)間で、データの受け渡しはどうしても発生するため、USING句の習得はCOBOLを学ぶ上での必須事項と言えます。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門