ILE COBOL 解説書

基本 PERFORM ステートメント

基本 PERFORM ステートメント内で参照されるプロシージャーは一度実行され、その後、PERFORM ステートメントに続く次の実行可能ステートメントに制御が渡されます。

PERFORM ステートメント - 形式 1
 
>>-PERFORM------------------------------------------------------>
 
>--+-プロシージャー名-1--+---------------------------------+-+-><
   |                     '-+-THROUGH-+--プロシージャー名-2-' |
   |                       '-THRU----'                       |
   '-命令ステートメント--END-PERFORM-------------------------'
 
 
プロシージャー名
手続き部にあるセクションまたは段落でなければなりません。

プロシージャー名-1 とプロシージャー名-2 の両方を指定する場合、 いずれか一方が宣言プロシージャー内のプロシージャー名であれば、 両方が同じ宣言プロシージャー内のプロシージャー名でなければなりません。

PERFORM ステートメントを宣言セクションに入れる場合には、 プロシージャー名-1 とプロシージャー名-2 も宣言セクションに入れなければなりません。

プロシージャー名-1 を指定する場合には、命令ステートメントおよび END-PERFORM 句を指定してはなりません。

プロシージャー名-1 を省略する場合には、命令ステートメントおよび END-PERFORM 句を指定しなければなりません。

命令ステートメント
行内 PERFORM について実行されるステートメント。

END-PERFORM
行内 PERFORM ステートメントの有効範囲を区切ります。 行内 PERFORM の実行は、それに含まれている最後のステートメントが実行された後に完了します。

行内 PERFORM ステートメント

行内 PERFORM ステートメントは、プロシージャー名-1 (さらに、指定されている 場合はプロシージャー名-2) の範囲内に含まれているステートメントの代わりに 行内 PERFORM に含まれているステートメントが実行される点を除き、 行外 PERFORM ステートメントと同じ一般規則に従って機能します。

特に行内または行外という語によって限定されていない限り、 行外 PERFORM ステートメントに適用される規則は、すべて行内 PERFORM にも適用されます。

行外 PERFORM ステートメント

行外 PERFORM ステートメントが実行されるたびに、プロシージャー名-1 に指定されたプロシージャーの最初のステートメントに制御が転送されます。 制御は、PERFORM ステートメントに続くステートメントに必ず戻されます。 この制御がどの点から戻されるかは、次のように判別されます。

プロシージャー名-1 とプロシージャー名-2 の間に必要なのは、連続した一連の操作が、プロシージャー名-1 に指定されたプロシージャーから開始され、 プロシージャー名-2 に指定されたプロシージャーで終了されるという関係だけです。

ネストされた PERFORM ステートメント

PERFORM ステートメントを、実行されるプロシージャー内に指定できます。 戻り点への論理パスが複数ある場合には、プロシージャー名-2 に EXIT ステートメントだけで構成される段落を指定できます。 そのようにする場合には、戻り点へのすべてのパスをこの段落に導かなくてはなりません。

プロシージャー名-1 とプロシージャー名-2 の両方を指定する場合には、GO TO および PERFORM ステートメントをこれらの段落またはセクションに含まれる一連のステートメント内に指定できます。 GO TO ステートメントでは、プロシージャー名-1 とプロシージャー名-2 の範囲外のプロシージャー名を参照してはなりません。 それを行うと、結果は予測できないものとなり、診断もできなくなります。

プロシージャー名-1 だけを指定する場合には、PERFORM および GO TO ステートメントをそのプロシージャー内に指定できます。 GO TO ステートメントでは、プロシージャー名-1 の範囲外のプロシージャー名を参照してはなりません。 それを行うと、結果は予測できないものとなり、診断もできなくなります。

実行されるプロシージャーに別の PERFORM ステートメントが含まれている場合、 組み込まれた PERFORM ステートメントと関連する一連のプロシージャーは、最初の PERFORM ステートメントの実行されるプロシージャーに全体が含まれているか、 さもなければ全体が範囲外になければなりません。 すなわち、他の活動状態の PERFORM ステートメントの実行されるプロシージャーの範囲内から実行点が始まる PERFORM ステートメントは、 他の活動状態の PERFORM ステートメントの出口点を超えて制御を渡してはなりません。 さらに、そのような複数の活動状態の PERFORM ステートメントが、共通の出口をもってはなりません。

+----------------------------------IBM 拡張----------------------------------+

複数の活動状態の PERFORM ステートメントが共通の出口点を持つことができます。

+------------------------------End of IBM 拡張-------------------------------+

PERFORM ステートメント以外の方法で制御が一連のプロシージャーへ渡された場合には、 これらのプロシージャーを参照する PERFORM ステートメントがない場合と同じように、 制御が出口点を超えて次の実行可能ステートメントへ渡されます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]