サーチ…


前書き

Progress ABLには、Windows DLLまたはUnix / Linux共有ライブラリプロシージャのファサードである内部プロシージャとプロシージャのプロトタイプの2種類があります。

関数と同様に、プロシージャはネストできません。プロシージャ内で関数をネストすることはできず、その逆もできません。

プロシージャーはRUNステートメントで呼び出されます。

構文

  • プロシージャ名を実行します。 // procedurenameというプロシージャを実行します。

  • RUN proc1(INPUT "HELLO")。 //文字列HELLOをproc1に入力します。

  • RUN proc2(入力var1、出力var2)。 // var1を入力し、var2をproc2に/から出力する

  • RUN proc3(入力 "name = 'joe'"、出力テーブルttResult)。 //入力name = joeとレコードをテーブルに出力する

  • PROCEDURE proc:// procという名前のプロシージャを宣言する

  • END PROCEDURE。 //現在のプロシージャを終了する

基本的な内部手続き

関数とは異なり、プロシージャを宣言する必要はありません。 RUNを使用して呼び出す前または後に、コード内の任意の場所に配置できます。

RUN proc.

//Procedure starts here
PROCEDURE proc:

//Procedure ends here
END PROCEDURE. 

プロシージャ名にコロン記号が表示され、これがブロックの先頭であることがわかります。ブロックはEND PROCEDURE.終了しEND PROCEDURE. (しかしこれは単にEND.と置き換えることができます)。

INPUTおよびOUTPUTパラメータ

プロシージャには、入力、出力、入出力(双方向)、および一時テーブルやデータセットなどの特殊なタイプの異なるパラメータがあります。

run文ではINPUTを宣言することはオプションです(デフォルトとみなされます)。その他の指示はすべてINPUT的に宣言する必要があります。

2つの整数を入力とし、小数を出力する手続き。

PROCEDURE divideAbyB:
    DEFINE INPUT  PARAMETER piA       AS INTEGER     NO-UNDO.
    DEFINE INPUT  PARAMETER piB       AS INTEGER     NO-UNDO.
    DEFINE OUTPUT PARAMETER pdeResult AS DECIMAL     NO-UNDO.

    pdeResult = piA / piB.

END PROCEDURE.

DEFINE VARIABLE de AS DECIMAL     NO-UNDO.

RUN divideAbyB(10, 2, OUTPUT de).

DISPLAY de. //5.00

パラメータは完全にオプションです。あなたは、あなたが好きなようにミックスして一致させることができます。パラメータの順序はあなた次第ですが、入力から開始して出力を終了すると便利です。実行文で正しい順序で並べる必要があり、混合の方向性が迷惑になることがあります。

再帰 - 再帰を参照

再帰は簡単です- RUNプロシージャ内からプロシージャ自体を。しかし、あなたがあまりにも遠くに再帰するならば、スタックはスペースを使い果たします。

手続きは階乗を計算する。

PROCEDURE factorial:
    DEFINE INPUT  PARAMETER piNum AS INTEGER     NO-UNDO.
    DEFINE OUTPUT PARAMETER piFac AS INTEGER     NO-UNDO.

    DEFINE VARIABLE iFac AS INTEGER     NO-UNDO.

    IF piNum = 1 THEN DO:
        pifac = 1.
    END.
    ELSE DO:
        RUN factorial(piNum - 1, OUTPUT iFac).
        piFac = piNum * iFac.
    END.

END PROCEDURE.

DEFINE VARIABLE f AS INTEGER     NO-UNDO.

RUN factorial(7, OUTPUT f).

DISPLAY f.

範囲

手順には独自のスコープがあります。外側のスコープは手順に「流出する」が、それ以外の方法では生じない。

DEFINE VARIABLE i AS INTEGER     NO-UNDO INIT 1.
DEFINE VARIABLE j AS INTEGER     NO-UNDO.

PROCEDURE p:

    MESSAGE i VIEW-AS ALERT-BOX. // 1
    MESSAGE j VIEW-AS ALERT-BOX. // 0

    j = 2.

END PROCEDURE.

RUN p.

MESSAGE i VIEW-AS ALERT-BOX. // 1
MESSAGE j VIEW-AS ALERT-BOX. // 2

外部のパラメーターと同じ名前を持つプロシージャー内の変数を宣言すると、ローカル変数のみが作成されます。

DEFINE VARIABLE i AS INTEGER     NO-UNDO INIT 1.
DEFINE VARIABLE j AS INTEGER     NO-UNDO.

PROCEDURE p:
    
    DEFINE VARIABLE i AS INTEGER     NO-UNDO INIT 5.

    MESSAGE i VIEW-AS ALERT-BOX. // 5
    MESSAGE j VIEW-AS ALERT-BOX. // 0

    j = 2.

END PROCEDURE.

RUN p.

MESSAGE i VIEW-AS ALERT-BOX. // 1
MESSAGE j VIEW-AS ALERT-BOX. // 2

プロシージャー内で作成された変数は、そのプロシージャーにのみアクセス可能です。

これはコンパイラエラーを生成します:

PROCEDURE p:
    
    DEFINE VARIABLE i AS INTEGER     NO-UNDO INIT 5.

END PROCEDURE.

RUN p.

MESSAGE i VIEW-AS ALERT-BOX. // Unknown Field or Variable name i - error 201


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow