![]() |
PARAMS 句はオプションですが、最後に必要です。
コアのサンプルも参照してください。このサンプルは、[スタート > すべてのプログラム > Micro Focus Enterprise Developer > Samples] の COBOL for JVM の下にあります。
パラメーターは、メソッドに渡される値参照または変数参照です。パラメーターの実際の値は、メソッドが呼び出されるときに指定されます。各パラメーターとそのタイプは、手続き部のヘッダの USING 句に指定されます。
メソッドを呼び出す場合、呼び出しでパラメーターを指定します。呼び出されたメソッドは、呼び出しと同じ順序でパラメーターを受け取ります。次に例を示します。
invoke type MyClass::MyMethod(a,b) ... method-id MyMethod. procedure division using x as string y as binary-long. ... end method.
上記の引数 a と b は、呼び出されたメソッドに渡され、呼び出されたメソッドのパラメーター x および y にそれぞれ相当します。パラメーターのタイプは、USING 句の AS 句で指定します。
次のタイプのパラメーターを渡すことができます。
パラメーターは、デフォルトで参照渡しになります (値渡しになる拡張メソッドを除く)。このデフォルトを値パラメーターに変更するには、METHODDEFAULT (VALUE) コンパイラ指令を設定します。
複数の値パラメーターを指定する場合、以降の連続するパラメーターに対してキーワード VALUE が前提になります。次の例では、v と vv は値渡し、それ以外は参照渡しになります。
procedure division using a as binary-long value v as binary-long vv as binary-long reference r as binary-long rr as binary-long.
値パラメーターは、ローカル変数に相当します。その初期値は、メソッドを呼び出すと確立されます。メソッドが処理されると、ローカル変数の値が変わる可能性があります。メソッドが終了しても、呼び出しコードの元の引数は変わりません。次に例を示します。
declare a as binary-long=3. invoke type MyUtils::CheckByValue(a) display a *> a は引き続き 3 になる method-id CheckByValue static. procedure division using value x as binary-long. set x to x + 1 *> x は 4 になる end method.
上記の例では、パラメーター a は値渡しになります。呼び出されたメソッドは値を増分します。ただし、呼び出しコードに戻ると、変数は変わっていません。
使用法:
マネージ タイプではなく、他の COBOL データ タイプの値パラメーターは、「COBOL Type Compatibility」表で定義されるとおりに公開されます。次に例を示します。PIC X フィールドとグループは、文字列として公開されます。.NET および JVM COBOL と他のマネージ言語の型の互換性を参照してください。
参照パラメーターには、値自体ではなく、必要な値の参照が含まれます。
参照パラメーターは、メソッドが呼び出されると値が確立されるローカル変数や、メソッドの処理中に値が変わる可能性があるローカル変数に相当します。値パラメーターとは異なり、メソッドが終了すると、呼び出しコードの元の引数の値は適宜変更されます。
参照パラメーターは、メソッドに対してローカルな変数のコピーを必ずしも作成するわけではないことに注意してください。代わりに、メソッドの呼び出し時に使用する場所の元の引数を参照します。メソッドの処理中に変数はローカルで変わる可能性がありますが、呼び出しコードの元の引数は必ずしも変わるわけではありません。変わる場合もあり変わらない場合もあります。元の引数の値は、メソッドが終了するまで不明です。メソッドが終了し、呼び出しコードに戻ると、呼び出しコードの元の引数の値が更新されます。
次に例を示します。
declare a as binary-long=3. invoke type MyUtils::CheckByReference(a) display a *> a は 4 になる method-id CheckByReference static. procedure division using reference x as binary-long. set x to x + 1 *> x は 4 になる end method.
上記の例では、パラメーター a は参照渡しになります。呼び出されたメソッドは変数 a を増分します。呼び出しコードに戻ると、変数は増分した値で更新されます。
使用法:
マネージ タイプに相当しない参照パラメーター (PIC X フィールド、グループ、binary-long 以外の数値フィールドなど) は、COBOL ポインターとして公開されます。
参照パラメーターと同様に、出力パラメーターは新しい記憶場所を作成しませんが、呼び出しで指定された変数の記憶場所を使用します。
出力パラメーターは、参照パラメーターと非常に似ています。主な違いは、呼び出しコードに戻る前に割り当てられる点です。
次に例を示します。
declare a as binary-long=4. declare b as binary-long. invoke type MyUtils::CheckByOutput(a,b) display "Value Param a = " & a *> a は引き続き 4 になる display "Output Param b = " & b *> b は 16 method-id CheckByOutput static. procedure division using value x as binary-long output y as binary-long. set x to x + 10 *> x は 14 になる set y to x + 2 *> y は 16 になる end method.
上記の例では、2 つのパラメーターが渡されます。この場合、変数 b は初期化されず、出力で渡されます。メソッド CheckByOutput は、変数 x および y を更新します。戻されると、出力変数 b は更新されますが、変数は変わりません。
使用法:
RETURNING 項目は、メソッドの結果を呼び出しコードに戻します。次に例を示します。
procedure division returning myReturn as condition-value.
各メソッドには、RETURNING 項目は 1 つしかありません。ただし、戻り情報のセットをオブジェクトでパッケージ化できます。たとえば、次の AddMins() メソッドは、インスタンス オブジェクト参照 myTime を受け取って戻します。
program-id ParamAsObject. 01 myTime type MyTimer value new MyTimer(5 45). procedure division. set myTime to myTime::AddMins(myTime 70) *> インライン呼び出し display myTime::anHour & ":" myTime::aMin end program. class-id MyTimer. 01 anHour binary-long property. *> PROPERTY キーワードによる取得/設定が可能 01 aMin binary-long property. ... method-id AddMins. 01 h binary-long value 0. 01 m binary-long value 0. procedure division using value a as type MyTimer b as binary-long returning c as type MyTimer. set b to a::aMin + b divide b by 60 giving h remainder m set c to new MyTimer(a::anHour + h , m) end method. end class.
上記の例は、文のインライン呼び出し構文を示しています。
set myTime to myTime::AddMins(myTime 70)
ここで、呼び出されたメソッド AddMins() は、項目 myTime を戻します。呼び出されたメソッドは、RETURNING 項目をその署名に指定します。