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


INVOKE ステートメント

INVOKE ステートメントは、COBOL または Java クラスのオブジェクト・インスタンスを生成したり、COBOL または Java クラスで定義されたメソッドを呼び出すことができます。

フォーマット
構文図を読む構文図をスキップする>>-INVOKE--+-ID-1-------+--+-リテラル-1-+----------------------->
           +-クラス名-1-+  +-ID-2-------+  
           +-SELF-------+  '-NEW--------'  
           '-SUPER------'                  
 
>--+-------------------------------------------------------+---->
   |        .--------------------------------------------. |  
   |        |                .-------------------------. | |  
   |        V                V                         | | |  
   '-USING----+----+--VALUE----+-+-----------+--ID-3-+-+-+-'  
              '-BY-'           | '-LENGTH OF-'       |        
                               '-リテラル-2----------'        
 
>--+-----------------+------------------------------------------>
   '-RETURNING--ID-4-'  
 
>--+-----------------------------------------+------------------>
   '-+----+--EXCEPTION--命令ステートメント-1-'  
     '-ON-'                                     
 
>--+----------------------------------------------+------------->
   '-NOT--+----+--EXCEPTION--命令ステートメント-2-'  
          '-ON-'                                     
 
>--+------------+----------------------------------------------><
   '-END-INVOKE-'  
 
ID-1
USAGE OBJECT REFERENCE として定義しなければなりません。 ID-1 の内容は、メソッドが呼び出されるオブジェクトを指定します。

ID-1 を指定するときは、リテラル-1 または ID-2 を指定し、呼び出すメソッドの名前を識別する必要があります。

以下の場合、INVOKE ステートメントの結果は未定義です。

クラス名-1
クラス名-1リテラル-1 または ID-2 とともに指定すると、INVOKE ステートメントにより、クラス名-1 で参照されるクラスの静的メソッドまたはファクトリー・メソッドが呼び出されます。リテラル-1 または ID-2 は、呼び出されるメソッドの名前を指定します。クラス名-1 が Java クラスの場合は、メソッドを静的メソッドにする必要があります。クラス名-1 が COBOL クラスの場合は、メソッドをファクトリー・メソッドにする必要があります。

クラス名-1 を NEW と共に指定すると、INVOKE ステートメントにより、クラス名-1 クラスのインスタンスである新しいオブジェクトが生成されます。

クラス名-1 は、INVOKE ステートメントが入っているクラスまたはプログラムの 構成セクションの REPOSITORY 段落に指定する必要があります。

 

SELF
現在実行中のメソッドを呼び出す際に使用されたオブジェクトへの暗黙の参照です。SELF が指定されている場合、 INVOKE ステートメントはメソッドの手続き部内に現れなければなりません。

 

SUPER
現在実行中のメソッドを呼び出す際に使用されたオブジェクトへの暗黙の参照です。呼び出されるメソッドを解決する際は、 現在実行中のメソッドのクラス定義内で宣言されているメソッドと、 そのクラスから派生されたクラス内で定義されているメソッドは無視されます。したがって、呼び出されるメソッドは、親クラスから継承されたものになります。
リテラル-1
リテラル-1 の値は、呼び出すメソッドの名前です。参照されるメソッドは、リテラル-1 によって識別されるメソッドをサポートしなければなりません。

リテラル-1 は英数字リテラルまたは国別リテラルでなければなりません。

リテラル-1 は、大文字小文字を区別して解釈されます。 INVOKE ステートメントの USING 句に指定したメソッド名、引数の数、および引数のデータ型は、 オブジェクトでサポートされた一致するシグニチャーを持つメソッドを選択する際に使用されます。メソッドは、多重定義することができます。

ID-2
呼び出されるメソッドの名前が呼び出し時に入れられる、英字、英数字、または国別カテゴリーのデータ項目。 参照されるオブジェクトは、ID-2 によって識別されるメソッドをサポートしなければなりません。

ID-2 を指定する場合は、オプションの句を指定せずに、ID-1 を USAGE OBJECT REFERENCE として定義する必要があります。つまり、ID-1 はユニバーサル・オブジェクト・リファレンスでなければなりません。

ID-2 の内容は、大文字小文字を区別して解釈されます。 INVOKE ステートメントの USING 句に指定したメソッド名、引数の数、および引数のデータ型は、 オブジェクトでサポートされた一致するシグニチャーを持つメソッドを選択する際に使用されます。メソッドは、多重定義することができます。

ID-2 をウィンドウ化日付フィールドにすることはできません。

NEW
NEW オペランドは、INVOKE ステートメントでクラス名-1 クラスの新しいオブジェクト・インスタンスを生成することを指定します。クラス名-1 は指定する必要があります。

クラス名-1 を Java でインプリメントした場合は、INVOKE ステートメントの USING 句を指定できます。 INVOKE ステートメントの USING 句に指定した引数の数と引数のデータ型は、 クラスでサポートされた一致するシグニチャーを持つ Java コンストラクターを選択する際に使用されます。 クラス名-1 クラスのオブジェクト・インスタンスは割り振られ、 選択されたコンストラクター (または、デフォルトのコンストラクター) は実行され、生成されたオブジェクトへの参照は戻されます。

クラス名-1 を COBOL でインプリメントした場合は、INVOKE ステートメントの USING 句を指定することはできません。クラス名-1 クラスのオブジェクト・インスタンスは割り振られ、インスタンス・データ項目は関連する VALUE 文節で指定 された値に初期化され、生成されたオブジェクトへの参照は戻されます。

NEW を指定する場合は、RETURNING 句も指定する必要があります。詳しくは、RETURNING 句を参照してください。

USING 句

USING 句は、ターゲット・メソッドに渡される引数を指定します。 引数のデータ型および引数のリンケージ規約は、Java でサポートされるものに制限されます。 詳細は、BY VALUE 句を参照してください。

BY VALUE 句

INVOKE ステートメントに指定する引数は、BY VALUE によって渡す必要があります。

BY VALUE 句では、送り出すデータ項目への参照ではなく、引数の値が渡されることが 指定されます。呼び出されるメソッドは、値によって渡された引数に対応する仮パラメーターを修正できますが、 呼び出されるメソッドは送り出しデータ項目の一時コピーへのアクセス権のみを持っているため、変更がこの引数に影響することはありません。

ID-3
データ部内の基本データ項目にしなければなりません。ID-3 のデータ型は、Java 相互運用に対応したデータ型にする必要があります。詳しくは、COBOL と Java の相互運用可能なデータ型を参照してください。 COBOL と Java における各種の引数の型には、ID-3 としてもサポートされる各種の例と、それらに対応する Java 型が示されています。

メソッドの引数は、常にネイティブ・データ型として受け渡されます。コンパイラー・オプション FLOAT(HEX) または BINARY(390) を指定する場合、これらのコンパイラー・オプションの影響を受けるメソッドの引数の記述に NATIVE 句を指定する必要があります。

ID-3 に適用される追加要件については、引数の適合性要件を参照してください。

リテラル-2
Java 相互運用に適した型にする必要があります。また、ターゲット・メソッドの中の対応するパラメーターの型と完全に一致している必要があります。 COBOL と Java における各種の引数の型には、サポートされるリテラルの形式と、それらに対応する Java 型が示されています。

リテラル-2 は DBCS リテラルであってはなりません。

LENGTH OF ID-3
ID-3 の長さを LENGTH OF 特殊レジスターの引数として渡すことを指定します。BY VALUE によって渡される LENGTH OF 特殊レジスターは、 PIC 9(9) バイナリー値として扱われます。LENGTH OF 特殊レジスターの詳細については、LENGTH OFを参照してください。

引数の適合性要件

ID-3 がオブジェクト・リファレンスのときには、以下の規則が適用されます。

ID-3 がオブジェクト・リファレンスではないときには、以下の規則が適用されます。

注: 引数の適合性要件の順守は、プログラマーの責任です。コンパイラーでは、これらの要件は検査されません。

RETURNING 句

RETURNING 句は、呼び出したメソッドから戻された値を入れるデータ項目を指定します。 INVOKE ステートメントに RETURNING 句を指定できるのは、COBOL または Java で作成されたメソッドを呼び出すときです。

ID-4
RETURNING データ項目。 ID-4 は、以下のように扱われます。

ID-4 のデータ型は、Java 相互運用に対応したデータ型にする必要があります。詳しくは、COBOL と Java の相互運用可能なデータ型を参照してください。 メソッドから戻される値は、常にネイティブ・データ型となります。コンパイラー・オプション FLOAT(HEX) または BINARY(390) を指定する場合、これらのコンパイラー・オプションの 影響を受ける戻り項目の記述に NATIVE 句を指定する必要があります。

ID-4 に適用される追加要件については、RETURNING 項目の適合性要件を参照してください。

ID-4 が指定され、ターゲット・メソッドが COBOL で作成されている場合、そのターゲット・メソッドの手続き部ヘッダーには RETURNING 句が必要です。ターゲット・メソッドが戻されるときは、ID-4 が USAGE OBJECT REFERENCE を使用して記述された場合、SET ステートメントの規則を使用して、その戻り値が ID-4 に割り当てられます。それ以外の場合は、MOVE ステートメントの規則が使用されます。

RETURNING データ項目は、出力専用のパラメーターです。呼び出されるメソッドに入った時点で、 PROCEDURE DIVISION RETURNING データ項目の初期状態の値は未定義であり予測不可能です。呼び出されるメソッドの PROCEDURE DIVISION RETURNING データ項目を初期化してから、 値を参照するようにしてください。 呼び出したメソッドが戻されるとき、呼び出し側に渡される値は、PROCEDURE DIVISION RETURNING データ項目の最終的な値です。

Java で定義されたローカルおよびグローバル・オブジェクト・リファレンスについては、「COBOL for Windows プログラミング・ガイド」を参照してください。これらの属性は、 オブジェクト・リファレンスの存続時間に影響を与えます。

注: RETURN-CODE 特殊レジスターは、INVOKE ステートメントの実行では設定されません。

RETURNING 項目の適合性要件

INVOKE ステートメントにクラス名-1 NEW を指定するには、RETURNING 句が必要です。 RETURNING 項目は、以下のいずれかでなければなりません。

INVOKE ステートメントに NEW 句を指定しない場合、メソッド呼び出し、および対応するターゲット・メソッドで 指定される RETURNING 項目は、以下の要件を満たす必要があります。

注: RETURNING 項目の適合性要件の順守は、プログラマーの責任です。コンパイラーでは、これらの要件は検査されません。

 

ON EXCEPTION 句

INVOKE ステートメントで指定されたメソッドのシグニチャーと一致するシグニチャーを持つメソッドが、識別されたオブジェクトまたはクラスでサポートされない場合は、 例外条件が発生します。 例外条件が発生すると、以下のアクションのいずれかが実行されます。

NOT ON EXCEPTION 句

例外条件が発生しない (つまり、識別されたメソッドが、指定されたオブジェクトでサポートされている) 場合、制御は呼び出されるメソッドに移ります。 呼び出されるメソッドから制御が戻ると、制御は次のものに移されます。

  1. 命令ステートメント-2。ただし NOT ON EXCEPTION 句が指定されている場合。
  2. INVOKE ステートメントの終わり。ただし、NOT ON EXCEPTION 句が指定されていない場合。

 

END-INVOKE 句

この明示的範囲終了符号は、INVOKE ステートメントの範囲を区切るために使用されます。 END-INVOKE で終了する INVOKE ステートメントとそれに含まれるステートメントは、 命令ステートメントのように処理される単位になります。 INVOKE ステートメントは、条件ステートメント内の命令ステートメントとして指定できます。例えば、 別のステートメントの例外句の中に指定できます。

COBOL と Java の相互運用可能なデータ型

COBOL データ型のサブセットは、COBOL と Java の相互運用のために使用できます。

COBOL INVOKE ステートメントの引数や RETURNING 項目として、 相互運用可能なデータ型を指定できます。同様に、これらのデータ型を Java メソッド呼び出し式から引数として渡し、USING 句のパラメーターとして、 または COBOL メソッドの手続き部ヘッダー内の RETURNING 項目として、それらを受け取ることができます。

以下の表には、相互運用でサポートされる基本的な Java 型と COBOL データ型、およびそれらの間の対応関係が示されています。

表 42. 相互運用可能な Java と COBOL のデータ型
Java データ型 COBOL データ型
boolean1 形式に対する条件変数と 2 つの条件名

level-number  data-name        PIC X.
88            data-name-false  VALUE X'00'.
88            data-name-true   VALUE X'01' THROUGH X'FF'. 
byte2 1 バイトの英数字、PIC X または PIC A
short3 USAGE BINARY、COMP、COMP-4、または COMP-5。PICTURE 文節は S9(n) 形式 (1 <= n <= 4)
int3 USAGE BINARY、COMP、COMP-4、または COMP-5。PICTURE 文節は S9(n) 形式 (5 <= n <= 9)
long3 USAGE BINARY、COMP、COMP-4、または COMP-5。PICTURE 文節は S9(n) 形式 (10 <= n <= 18)
float3 USAGE COMP-1
double3 USAGE COMP-2
char 単一文字 (国別) : PIC N USAGE NATIONAL
(国別カテゴリーの基本データ項目)
クラス型
(オブジェクト・リファレンス)
USAGE OBJECT REFERENCE クラス名
  1. COBOL for Windows では、示されたとおりの形式で 2 つの条件名が PIC X データ項目の後に続く場合にのみ、PIC X 引数またはパラメーターが Java ブール型として解釈されます。それ以外の場合、 PIC X 引数またはパラメーターは、Java バイト型として解釈されます。
  2. NATIVE 文字フォーマットおよび EBCDIC 文字フォーマットはいずれも Java バイト型と相互運用可能です。
  3. Java の short 型および int 型と相互運用可能なのは、NATIVE バイナリー・フォーマットのみです。
  4. Java の long 型、float 型、および double 型と相互運用可能なのは、NATIVE 浮動小数点フォーマットのみです。

基本タイプに加えて、Java String と Java 基本型の配列も、COBOL と相互運用が可能です。ただし、これを行うには、COBOL ランタイム・システムと Java Native Interface (JNI) で提供される特別なメカニズムが必要 となります。

配列データを COBOL に渡したり、COBOL から受け取ったりする場合、Java プログラムでは、 通常の Java 構文を使用して、配列の型を宣言します。 COBOL プログラムでは、配列をサポートするために提供されている特別なクラスのインスタンスを含むオブジェクト・リファレンス として、配列を宣言します。メソッドを呼び出す場合、Java 型と COBOL 型の間の変換は、自動的に行われます。

String データを COBOL に渡したり、COBOL から受け取ったりする場合、Java プログラムでは、 通常の Java 構文を使用して、配列の型を宣言します。 COBOL プログラムでは、特別な jstring クラスのインスタンスを含むオブジェクト・リファレンス として、String を宣言します。メソッドを呼び出す場合、Java 型と COBOL 型の間の変換は、自動的に行われます。以下の表には、Java 配列、String データ型、および対応する特別な COBOL データ型が示されています。

表 43. COBOL と Java の相互運用可能な配列および String データ型
Java データ型 COBOL データ型
boolean[ ] オブジェクト・リファレンス jboooleanArray
byte[ ] オブジェクト・リファレンス jbyteArray
short[ ] オブジェクト・リファレンス jshortArray
int[ ] オブジェクト・リファレンス jintArray
long[ ] オブジェクト・リファレンス jlongArray
char[ ] オブジェクト・リファレンス jcharArray
Object[ ] オブジェクト・リファレンス jobjectArray
String オブジェクト・リファレンス jstring

以下の Java 配列型は、現在サポートされていません。

Java データ型 COBOL データ型
float[ ] オブジェクト・リファレンス jfloatArray
double[ ] オブジェクト・リファレンス jdoubleArray

REPOSITORY 段落では、他のクラスで項目をコード化するのと同様に、 使用する特別なクラスごとに項目のコード化が必要です。例えば、jstring を使用する場合は、以下の項目をコード化します。

Configuration Section.
Repository.
    Class jstring is “jstring”.

また、String 型の場合は、COBOL リポジトリー項目で java.lang.String の外部クラス名を指定します。

Repository.
    Class jstring is “java.lang.String”.

Java Native Interface (JNI) では、これらの型の COBOL オブジェクトを COBOL で操作するための呼び出し可能なサービスが提供されています。例えば、呼び出し可能サービスを使用すると、jstring オブジェクト内に COBOL の英数字データまたは国別データを 設定したり、jstring オブジェクトからデータを抽出したりすることができます。 JNI 呼び出し可能サービスの使用方法の詳細については、「COBOL for Windows プログラミング・ガイド」を参照してください。

クラス定義のためのリポジトリー項目については、REPOSITORY 段落を参照してください。例については、「COBOL for Windows プログラミング・ガイド」を参照してください。

COBOL と Java における各種の引数の型

以下の表では、INVOKE ステートメントの引数として使用可能な各種の COBOL 項目の例と、 それに対応する Java 型を示しています。

表 44. 各種の COBOL 引数のタイプとそれに対応する Java 型
COBOL 引数 対応する Java データ型
長さが 1 の usage display の参照変更項目 (NATIVE または EBCDIC) byte
長さが 1 で使用法 NATIONAL の参照変更項目
(使用法 NATIONAL の基本データ項目または国別グループ項目のいずれか)
char
SHIFT-IN および SHIFT-OUT 特殊レジスター byte
使用法が BINARY のときの LINAGE-COUNTER 特殊レジスター int
LENGTH OF 特殊レジスター int

以下の表には、INVOKE ステートメントの引数として使用可能な COBOL リテラルのタイプと、 それに対応する Java 型を示しています。

表 45. COBOL リテラル引数のタイプとそれに対応する Java 型
COBOL リテラル引数 対応する Java データ型
小数部の桁はなく、9 桁以下の固定小数点数字リテラル int
浮動小数点数字リテラル double
表意定数 ZERO int
1 文字の英数字リテラル byte
1 文字の国別リテラル char
シンボリック文字 byte
表意定数 SPACE、QUOTE、HIGH-VALUE、または LOW-VALUE byte

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

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