一歩先を行くCOBOL言語のユーザ定義関数について | 応用ガイド

COBOL(コボル)言語のユーザ定義関数を使った関数の記述方法とは

応用-関数-イメージ

COBOL(コボル)言語におけるユーザ定義関数

COBOLでは組み込み関数を使用して、演算処理や表操作などを行うことができますが、COBOL2002で実装されたユーザ定義関数(利用者定義関数)ではユーザーが関数を定義して利用することが可能になりました。

ユーザ定義関数を使用するには関数名段落(FUNCTION-ID)を指定し、ユーザーが任意に関数を作成することができます。ユーザ定義関数を使用すれば、プログラムにおいて引数を指定して関数を呼出して、定められた処理を実行して結果を返す関数を繰り返し利用することができます。

以下はユーザ定義関数の使用イメージです。
応用-関数-使用例1
ユーザ定義関数の詳細については次項で解説いたします。

ユーザ定義関数の定義と使い方

ユーザ定義関数は以下のように定義します。

■ユーザ定義関数の書式
IDENTIFICATION DIVISION.
FUNCTION-ID ユーザ定義関数名1 [ AS 定数 ].
[ オプション段落 ]
[ 環境部 ]
[ データ部 ]
[ 手続き部 ]
END FUNCTION ユーザ定義関数名1
ユーザ定義関数の定義はプログラムの定義と似ていますが、PROGRAM-IDの記述がFUNCTION-IDになります。
また、手続き部(PROCEDURE DIVISION )には関数の実行結果を返すための「RETURNING」を指定する必要があります。
PROCEDURE DIVISION [ USING BY VALUE又はREFERENCE] データ名-1 RETURNING データ名-2
関数終了時の「END FUNCTION」は省略できません。

■ユーザ定義関数の宣言
IDENTIFICATION DIVISION.

CONFIGURATION SECTION.
REPOSITORY.
FUNCTION ユーザ定義関数名1 [AS 定数].
ユーザ定義関数を使用するためには、リポジトリ段落(REPOSITORY)で指定したユーザ定義関数名を指定する必要があります。

■ユーザ定義関数の呼出し
ユーザ定義関数はRETURNINGで結果を返すため、以下のように計算式として使用することができます。

1)計算式で使用
応用-関数-使用例2

また、返り値の結果をそのまま条件式として使用することも可能です。

2)条件式で使用
応用-関数-使用例3

■ユーザ定義関数の記述例
ご紹介する記述例ではユーザ定義関数に渡された引数の値を条件式で精査し、値が0だったら1を返却し、それ以外の値だったら0を返却しています。

1)ユーザ定義関数の宣言

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. FUNCTION_SAMPLE01.
  3. ENVIRONMENT DIVISION.
  4. CONFIGURATION SECTION.
  5.  
  6. *>----------------------------------------------------
  7. *> 使用する関数の宣言
  8. *>----------------------------------------------------
  9. REPOSITORY.
  10. FUNCTION FUNC.
  11.  
  12. DATA DIVISION.
  13. WORKING-STORAGE SECTION.
  14. *>----------------------------------------------------
  15. *> データ項目の定義
  16. *>----------------------------------------------------
  17. 01 NUM PIC 9.
  18. 01 SUM PIC 9.
  19. PROCEDURE DIVISION.
  20. MOVE 10 TO NUM.
  21. *>----------------------------------------------------
  22. *> 関数の呼出し
  23. *>----------------------------------------------------
  24. COMPUTE SUM = FUNCTION FUNC (NUM).
  25. ...省略...
  26. END PROGRAM FUNCTION_SAMPLE01.

2)ユーザ定義関数の定義

  1. IDENTIFICATION DIVISION.
  2. FUNCTION-ID. FUNC.
  3. DATA DIVISION.
  4. LINKAGE SECTION.
  5.  
  6. *>----------------------------------------------------
  7. *> データ項目の定義
  8. *>----------------------------------------------------
  9. 01 NUM PIC 9.
  10. 01 RET PIC 9.
  11.  
  12. *>----------------------------------------------------
  13. *> 関数の処理
  14. *>----------------------------------------------------
  15. PROCEDURE DIVISION
  16. USING BY VALUE NUM
  17. RETURNING RET.
  18.  
  19. IF NUM = 0 THEN
  20. COMPUTE RET = 1
  21. ELSE
  22. COMPUTE RET = 0
  23. END-IF.
  24. EXIT FUNCTION.
  25. END FUNCTION FUNC.

この記述例ではユーザ定義関数FUNCに値を設定したデータ項目を引数に関数を呼出しています。ユーザ定義関数の定義側では関数定義で指定された仮引数のBY VALUEに従って引数が受け渡されます。

受け渡される引数については、呼び出し側のプログラムの引数の型やサイズを合わせておく必要があります。前述したように関数終了時は「END FUNCTION ユーザ定義関数」を必ず指定します。

また、関数呼出し側のプログラムではユーザ定義関数は何度でも呼び出すことが可能です。そのため、入力された値ごとに関数を呼出し、関数内で入力内容を精査したり演算するといった使い方もできます。

ユーザ定義関数の確認問題

ここでは、練習問題にチャレンジしてみましょう。

問1)
ユーザ定義関数を使用するためにはリポジトリ段落(REPOSITORY)以下にどのように宣言するか。

答え)
FUNCTION ユーザ定義関数名1 [AS 定数].

問2)
ユーザ定義関数を定義するときに関数名段落にはどのように記述するか。

答え)
FUNCTION-ID ユーザ定義関数名1

関数の概念や操作方法はCOBOL言語に限らず、CやJavaなどさまざまなプログラミング言語でも必要となる知識です。ユーザ定義関数は計算式の中で記述できたりIF文などの条件式でも記述することができますので、処理内容をわかりやすくまとめることが可能です。

ユーザ定義関数は利用者が自由に処理を定義することができますので、ぜひ活用してください。

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

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

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

COBOL入門のカテゴリー

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