Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, 言語解説書

パッケージ

パッケージとは、宣言、デフォルト・ステートメント、およびプロシージャー・ブロックだけ入れることができるブロックのことです。 名前が再び宣言されない限りは、パッケージは、パッケージ内に含まれる すべての宣言およびプロシージャーによって共用される名前の有効範囲を構成します。 レベル 1 のプロシージャーの一部またはすべてが搬出され、 外部プロシージャーとしてパッケージの外で認識できるようになります。 パッケージは、複数のエントリー・ポイント・アプリケーションを実施する際に使用することができます。

MAIN プロシージャーを含んだパッケージは、FETCHABLE プロシージャーも含めてはいけません。 MAIN プロシージャーを含んだパッケージは、DLL にリンクすることもできません。 このパッケージは、必要に応じて DLL のルーチンを呼び出すことができる基本実行可能モジュールの一部を形成する必要があります。 もちろん、このようなパッケージでは、静的にリンクされた他のルーチンから呼び出すことができる外部ルーチンも定義できます。 また、このパッケージでは、静的にリンクされた他のルーチンから参照可能な EXTERNAL STATIC データも定義できます。

(MAIN ルーチンを含んでいない) パッケージは、DLL にリンクされ、DLL のそのパッケージからエクスポートされる唯一の EXTERNAL STATIC 変数は、RESERVED 属性を持つ変数になります。

構文図を読む構文図をスキップする>>-condition-prefix--:--package-name--:--PACKAGE---------------->
 
>--+--------------------------------------+--------------------->
   |               .-,-------------.      |
   |               V               |      |
   '-EXPORTS--(--+---| procedure |-+-+--)-'
                 '-*-----------------'
 
>--+---------------------------------------+-------------------->
   |                .-,-------------.      |
   |                V               |      |
   '-RESERVES--(--+---variable name-+-+--)-'
                  '-*-----------------'
 
                            .-------------------------.
                            V                         |
>--+------------------+--;----+-declare-statement---+-+--------->
   '-OPTIONS(options)-'       +-default-statement---+
                              '-procedure-statement-'
 
>--END--+--------------+--;------------------------------------><
        '-package-name-'
 
procedure:
 
|--procedure-name--+----------------------------+---------------|
                   '-EXTERNAL(environment-name)-'
 
condition-prefix
PACKAGE ステートメントで指定される条件接頭語は、PROCEDURE ステートメントで指定変更されない限り、 パッケージ内に含まれているすべてのプロシージャーに適用されます。 条件接頭語に関する詳細については、条件接頭語を参照してください。
package-name
パッケージの名前です。
EXPORTS
すべての (EXPORTS(*)) または名前のついたプロシージャーは、搬出され、 パッケージ外で外部的に認識されることを指定します。 EXPORTS オプションを指定しないと、EXPORTS(*) が想定されます。
procedure name
パッケージ内のレベル 1 のプロシージャーの名前です。
EXTERNAL (environment name)
宣言の有効範囲に記載されている有効範囲属性です。
RESERVES
このパッケージがすべて (RESERVES(*)) に対してストレージを予約しているか、 あるいは RESERVED 属性を持つ名前付きの変数に対してだけ ストレージを予約しているかを指定します。 RESERVED 属性を参照してください。
variable name
レベル 1 の外部静的変数の名前です。
OPTIONS オプション
PACKAGE ステートメントに適用する OPTIONS オプションについては、 OPTIONS オプションとその属性を参照してください。
declare statement
パッケージ内で宣言される変数は、その宣言がレベル 1 の プロシージャーの外部で行われる場合には、静的、基底付き、 被制御のストレージ・クラスを持たなければなりません。 自動変数を使用することはできません。 デフォルトのストレージ・クラスは、STATIC です。 データ宣言を参照してください。
default statement
属性のデフォルトを参照してください。
procedure statement
PROCEDURE ステートメントおよび ENTRY ステートメントを参照してください。

PACKAGE ステートメントの例は、図 3 に示されています。

図 3. PACKAGE ステートメント
*Process S A(F) LANGLVL(SAA2) LIMITS(EXTNAME(31)) NUMBER;
 Package_Demo: Package exports (Factorial);
 
 /***********************************************/
 /*                 Common Data                 */
 /***********************************************/
 
 dcl N fixed bin(15);
 dcl Message char(*) value('The factorial of ');
 
 /***********************************************/
 /*                 Main Program                */
 /***********************************************/
 
 Factorial: proc options (main);
    dcl Result fixed bin(31);
    put skip list('Please enter a number whose factorial ' ||
                  'must be computed ');
    get list(N);
    Result = Compute_factorial(n);
    put list(Message || trim(N) || ' is ' || trim(Result));
 end Factorial;
 
 /***********************************************/
 /*                  Subroutine                 */
 /***********************************************/
 
 Compute_factorial: proc (Input) recursive returns (fixed bin(31));
    dcl Input fixed bin(15);
    if Input <= 1 then
       return(1);
    else
       return( Input*Compute_factorial(Input-1) );
 end Compute_factorial;
 
 end Package_Demo;

Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)