Rational Developer for System z
COBOL for Windows バージョン 7.5 言語解説書


関数の指定

関数 ID の一般的なフォーマットは次のとおりです。

フォーマット
構文図を読む構文図をスキップする>>-FUNCTION--関数名-1--+------------------+--+------------+----><
                       |    .--------.    |  '-参照修飾子-'  
                       |    V        |    |                  
                       '-(----引数-1-+--)-'                  
 
関数名-1
関数名-1 は、組み込み関数の名前のうちの 1 つでなければなりません。
引数-1
引数-1 は、指定された関数の引数要件を満たす、ID、リテラル (表意定数以外)、または算術式でなければなりません。

引数-1 は、UNDATE 組み込み関数の場合を除いて、ウィンドウ化日付フィールドであってはなりません。

参照修飾子
タイプが英数字または国別の関数についてのみ指定できます。

関数 ID は、その関数タイプのデータ項目を使用できるところであればどこでも指定できます。関数の引数は、同じ関数についての別の評価を含め、結果がその引数の要件を満たす、任意の関数または関数を含む式にすることができます。

手続き部のステートメント内では、それぞれの関数 ID は、それと同じ位置にも ID に関連付けられた参照変更や添え字付けがあれば、それらが評価される時に同時に評価されます。

関数の定義と評価

ある関数のクラスと特性、およびそれが必要とする引数の個数とタイプは、 その関数定義によって決定されます。関数の有する特性には、次のようなものがあります。

いくつかの関数の場合、そのクラスと特性は、 その関数への引数によって決定されます。

組み込み関数の評価はコンテキストには影響されません。 つまり、関数評価は関数以外の操作やオペランドには影響されません。 ただし、関数の評価は、引数の属性によって影響を受ける場合があります。

手続き部のステートメント内では、それぞれの関数 ID は、それと同じ位置にも ID に関連付けられた参照変更や添え字付けがあれば、それらが評価される時に同時に評価されます。

関数のタイプ

COBOL の関数には以下のタイプがあります。

英数字 関数は、英数字のクラスとカテゴリーに属します。 戻される値は、NATIVE 句がなくても暗黙のうちに DISPLAY を使用します。戻り値の文字位置の数は、関数定義によって決定されます。

国別 関数は、国別のクラスとカテゴリーに属します。 戻り値は、暗黙のうちに USAGE NATIONAL を持ち、国別文字 (UTF-16) で表現されます。戻り値の文字位置の数は、関数定義によって決定されます。

数字 関数は、数字のクラスとカテゴリーに属します。戻り値は、常に演算符号を持つとみなされ、数字の中間結果になります。詳細については、「COBOL for Windows プログラミング・ガイド」を参照してください。

整数 関数は、数字のクラスとカテゴリーに属します。 戻り値は、常に演算符号を持つとみなされ、整数の中間結果になります。戻り値の桁数は、関数定義によって決定されます。詳細については、「COBOL for Windows プログラミング・ガイド」を参照してください。

使用の規則

英数字関数
英数字関数は、クラスおよびカテゴリーが英数字のデータ項目を使用できる、一般フォーマットに関連する規則が関数への参照を特別に禁止していない一般フォーマットの中であれば、どこでも指定することができます。ただし、以下の例外があります。
 
英数字引数は使用できる任意の関数の引数として、英数字関数を使用することができます。

英数字関数の参照変更は許可されています。ある関数に対して参照変更が指定されている場合、その参照変更の評価は、その関数の評価の直後に行われます。つまり、関数の戻り値は参照変更されます。

次の場合、英数字関数は使用できません。

国別関数
国別関数は、クラスおよびカテゴリーが国別のデータ項目を使用できる、一般フォーマットに関連する規則が関数への参照を特別に禁止していない一般フォーマットの中であれば、どこでも指定することができます。ただし、以下の例外があります。

国別引数は使用できる任意の関数の引数として、国別関数を使用することができます。

国別関数の参照変更は許可されています。ある関数に対して参照変更が指定されている場合、その参照変更の評価は、その関数の評価の直後に行われます。つまり、関数の戻り値は参照変更されます。

国別関数は使用できません。

数字関数
数字関数は、算術式を指定できる個所でのみ使用できます。

数字引数を使用できる関数の引数として、数字関数を参照することができます。

たとえ個々の参照が整数値をもたらす場合でも、数字関数は、整数オペランドが必要とされるところでは使用することができません。関数 INTEGER または関数 INTEGER-PART を使用すると、 引数のタイプを数字から整数に強制的に変えることができます。

整数関数
整数関数は、算術式を指定できる個所でのみ使用することができます。

整数引数を使用できる関数の引数として、整数関数を参照することができます。

使用上の注意:

引数

関数によって戻り値は、その関数が評価されるときに、関数 ID の中で指定された引数によって決定される場合があります。 関数の中には引数が不要なものもあれば、引数の固定数が必要なもの、さらには引数の可変数を受け入れるものがあります。

引数は、次のいずれかのうちの 1 つでなければなりません。

関数の個別の引数指定については、関数定義を参照してください。

引数のタイプには次のものがあります。

英字
英字クラス、または英文字だけを含む英数字リテラルのクラスに属する基本データ項目。 引数の内容は、関数の値を決定するために使用されます。引数の長さは、関数の値を決定するために使用される場合があります。
英数字
英字クラス、英数字または英数字リテラルのクラスに属するデータ項目。 引数の内容は、関数の値を決定するために使用されます。引数の長さは、関数の値を決定するために使用される場合があります。

DISPLAY-OF 関数および NATIONAL-OF 関数に対してのみ英数字引数として指定できる値を 付録F. コード・ページ名に示しています。

DBCS
DBCS クラスまたは DBCS リテラルのクラスに属する基本データ項目。引数の内容は、関数の値を決定するために使用されます。 引数の長さは、関数の値を決定するために使用される場合があります。 (DBCS データ項目または DBCS リテラルは、引数としては NATIONAL-OF 関数に対してのみ使用できます。)
国別
国別クラスに属するデータ項目 (カテゴリーは国別、国別編集、または数字編集)。 引数の内容は、関数の値を決定するために使用されます。引数の長さは、関数の値を決定するために使用される場合があります。
整数
結果として常に整数値をもたらす算術式。符号も含めてこの式の値は、関数の値を決定するために使用されます。
数字
算術式。 式には、数値リテラルと、カテゴリーが数字、内部浮動小数点、および外部浮動小数点のデータ項目を含めることができます。数字データ項目は、データ項目のカテゴリーに対して許可されている任意の使用法 (NATIONAL を含む) を持つことができます。 符号も含めてこの式の値は、関数の値を決定するために使用されます。

関数によっては、その引数に対して制約 (受け入れ可能な値の範囲など) を設けているものがあります。関数に対して引数として割り当てられる値が、指定の制限に適合しない場合には、戻り値は未定義になります。

ネストされた関数が引数として使用される場合、その引数の評価は、 その関数より外側の関数が持つ引数によって影響を受けることはありません。

同一の関数のレベルにある引数だけが、相互作用します。この相互作用は、次の 2 つの領域で発生します。

関数の評価においては、その引数は、 引数リストに指定された順番に左から右へと個別的に評価されます。評価される引数は、関数 ID、または関数 ID を含む式であることができます。

算術式を引数として指定し、その式の最初の演算子が単項演算子の加算記号または減算記号である場合、式はその直前に左括弧を必要とします。

浮動小数点リテラルは、数字引数が使用できる個所ならどこでも使用できます。また、数字引数が許される関数の中で使用する算術式中でも使用できます。

内部浮動小数点項目および外部浮動小数点項目 (display 浮動小数点および国別浮動小数点の両方) は、数字引数が許される個所であればどこでも使用できます。また、数字引数が許される関数への引数として算術式の中でも使用できます。

浮動小数点項目および浮動小数点リテラルは、整数引数が必要とされる個所や、英数字または国別クラスの引数が必要とされる個所 (LOWER-CASE、REVERSE、 UPPER-CASE、NUMVAL、および NUMVAL-C 関数など) では使用できません

以下のステートメントは、英数字引数の中の各小文字を対応する大文字に置き換える、組み込み関数 UPPER-CASE の使用例です。

MOVE FUNCTION UPPER-CASE('hello') TO DATA-NAME.

このステートメントは、HELLODATA-NAME へ移動します。

以下のステートメントは、国別引数の中の各小文字に対応する大文字に置き換える組み込み関数 LOWER-CASE の使用例です。

MOVE FUNCTION LOWER-CASE(N'HELLO') TO N-DATA-NAME.

このステートメントは、国別文字 helloN-DATA-NAME へ移動します。

以下のステートメントは、数字組み込み関数の使用例です。

COMPUTE NUM-ITEM = FUNCTION SUM(A B C)

このステートメントは数字関数 SUM を使用して、A、B、および C の値を加算し、その結果を NUM-ITEM へ格納します。

ALL 添え字

関数が 1 つの引数を任意の回数で繰り返して使用することができる場合、テーブルを識別するデータ名と修飾子を指定することによって、そのテーブルを参照することができます。 これはその直後に、 1 つ以上の添え字として ALL の添え字付けを行うことができます。

ヒント: ALL 添え字の評価は、少なくとも 1 つの引数の中に結果としてもたらされる必要があります。さもなければ、その関数によって戻り値は、未定義になってしまいます。ただし、SSRANGE コンパイラー・オプションと CHECK ランタイム・オプションを指定すれば、実行時に状況の診断ができます。

添え字として ALL を指定するのは、その添え字の位置にあらゆる有効な添え字を使用して、 すべての可能なテーブル・エレメントを指定することと同じです。

テーブル名 (ALL) としてテーブル引数を指定する場合、 1 つの引数として左から右への順序で各テーブル・エレメントの暗黙指定をします。この場合、最初 (左端) の引数が、テーブル名 (1) であり、ALL が 1 によって置き換えられます。次の引数はテーブル名 (2) です。ここで、添え字の値は 1 だけ増加されています。このプロセスは、暗黙の引数を 1 つずつ生成するために添え字の値を 1 ずつ増加しながら続行され、添え字の値が ALL の値の範囲の最大値に達するまで行われます。

例えば、

FUNCTION MAX(Table(ALL))

は次のものと同じになります。

FUNCTION MAX(Table(1) Table(2) Table(3) ... Table(n))

ここで n は、Table の中のエレメント数です。

テーブル名 (ALL, ALL, ALL) のように ALL 添え字が複数ある場合、最初の暗黙の引数はテーブル名 (1, 1, 1) となります。ここで、各 ALL 添え字は 1 によってそれぞれ置き換えられています。次の引数はテーブル名 (1, 1, 2) となります。ここでは、右端の添え字が 1 だけ増加されてます。右端の ALL によって表現される添え字は、その値の範囲の限度まで増加され、それぞれの値に対する暗黙の引数を作り出します。

いったん ALL として指定された添え字が、その値の範囲の限度まで増加されると、 その左にある ALL として指定されている次の添え字が 1 だけ増加されます。新たに増加される添え字の右にある ALL として指定されている各添え字は、 1 に設定されて暗黙の引数が作り出されます。ここで再び、 右端の ALL によって表現されている添え字がその値の範囲の限度まで増加され、 その値に対し暗黙の引数を作り出します。この処理は、 ALL として指定されている各添え字がその値の範囲の限度に増加されるまで繰り返されます。

例えば、

FUNCTION MAX(Table(ALL, ALL))

は次のものと同じになります。

FUNCTION MAX(Table(1, 1) Table(1, 2) Table(1, 3) ... Table(1, n)
             Table(2, 1) Table(2, 2) Table(2, 3) ... Table(2, n)
             Table(3, 1) Table(3, 2) Table(3, 3) ... Table(3, n)
             ...
             Table(m, 1) Table(m, 2) Table(m, 3) ... Table(m, n))

ここで、nTable の列の次元の中のエレメント数であり、mTable の行の次元の中のエレメント数です。

ALL 添え字は、リテラル、データ名、または指標名の各添え字と結合して多次元テーブルを参照することができます。

例えば、

FUNCTION MAX(Table(ALL, 2))

は次のものと同じになります。

FUNCTION MAX(Table(1, 2)
             Table(2, 2)
             Table(3, 2)
             ...
             Table(m, 2))

ここで、mTable の行の次元の中のエレメント数です。

ALL 添え字が、ある引数に対して指定され、その引数が参照変更を行う場合、その参照修飾子は、テーブルのエレメントとして暗黙に指定されたそれぞれのエレメントに適用されます。

ALL 添え字が参照変更を行うオペランドに対して指定されている場合、その参照修飾子は、 テーブルのエレメントとして暗黙に指定されたそれぞれのエレメントに適用されます。

ALL 添え字が OCCURS DEPENDING ON 文節に関連付けられている場合、その値の範囲は、OCCURS DEPENDING ON 文節のオブジェクトによって決定されます。

例えば、次のような給与計算レコードの定義があります。

01 PAYROLL.
   02 PAYROLL-WEEK   PIC 99.
   02 PAYROLL-HOURS  PIC 999 OCCURS 1 TO 52
        DEPENDING ON PAYROLL-WEEK.

次の COMPUTE ステートメントを使用することによって、 その年のその日までの就業時間の合計、週当たりの最大勤務時間、および最大勤務時間があった週を識別することができます。

COMPUTE YTD-HOURS = FUNCTION SUM (PAYROLL-HOURS(ALL))
COMPUTE MAX-HOURS = FUNCTION MAX (PAYROLL-HOURS(ALL))
COMPUTE MAX-WEEK  = FUNCTION ORD-MAX (PAYROLL-HOURS(ALL))

これらの関数呼び出しにおいて、ALL 添え字を使用することによって PAYROLL-HOURS 配列の (PAYROLL-WEEK フィールドの実行時間値に応じて異なる) すべてのエレメントを参照できます。


ご利用条件 | フィードバック

Copyright IBM Corporation 1996, 2008.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)