サーチ…
前書き
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