exit

EGL exit 文を使用すると、関数のすべてまたは一部、あるいは条件文または loop 文によって制御されるコード・ブロックのすべてまたは一部を即時に終了できます。

修飾子を指定していない場合、exit は、caseforforEachifopenUIwhile の各文により制御されるコード・ブロックのうち、最も新しく入力したものからコントロールを移動します。 exit 文がループ内にない場合、 この文は最近入力された関数からコントロールを移動します。

以下のいずれかの修飾子を指定すると、exit 文は、 最近入力されたそのタイプのループからコントロールを渡します。

これらの修飾子はネストされたループを使用する際に効果的です。後出の『例』セクションの最初の例を参照してください。これらの修飾子のいずれかを指定するときに、指定されたタイプのループに入っていない場合、EGL により検証エラーが表示されます。

program 修飾子は、現行プログラムの呼び出し元に制御を戻します。呼び出し先プログラムでは、exit program によってチェーン内の前のプログラムに戻ります。 メインプログラムでは、exit program は実行単位を終了します。

rununit 修飾子は、呼び出し先プログラムのシーケンスを終了します。プログラム A がプログラム B を呼び出し、プログラム B が exit program を発行すると、制御はプログラム A に戻ります。ただし、プログラム B が exit rununit を発行すると、プログラム A も終了します。メインプログラムでは、exit rununitexit program と同じ影響を与えます。

program または rununit 修飾子を指定する場合は、以下のようないくつかのオプションがあります。

EGL は、旧 VisualAge® Generator プログラムとの互換性のため、stack 修飾子も提供します。 この修飾子は、新規プログラムの開発時には使用しないでください。 代わりに、例外をスローすることにより、プログラム・フローをより厳密に制御します。 詳しくは、『例外の処理』を参照してください。 修飾子 stack は、main 関数に直接制御を戻します。 その過程で、EGL はランタイム・スタックの中間関数に対するすべての参照を除去します。 ランタイム・スタックは、main 関数から現在の関数を生成する一連の関数のリストです。 main 関数で out または inOut 修飾子を持つ関数を呼び出した場合、これらの引数の現行値は exit stack 文の後、main 関数で使用できるようになります。main 関数で stack 修飾子を使用すると、 コントロールは、(ラベルを指定した場合であっても) 単純に次の順次文に渡されます。

修飾子 stack を使用すると、main 関数に戻ったときのジャンプ先のラベルを指定できます。 EGL では、マイグレーション済みプログラムとの互換性の目的でのみ、この機能が提供されています。ラベルや goTo 文は、構造化プログラミング標準に準拠していないので、 新規コードでは使用しないでください。

構文

exit 文の構文図
statement
終了するコード・ブロックの種類 (caseforforEachifopenUI、または while) を指定できます。 このオプションは、ブロックを深くネストしている場合に役立ちます。 処理は、指定された文の後で続行されます。
label1
caseforforEachif、または while ステートメントの囲みに付加されるラベルです。参照されたステートメントで処理が継続されます。
returnValue
リテラル整数、または整数へと解決される変数、定数、または数式。 メインプログラム (呼び出し先プログラムではない) で、オペレーティング・システムが戻り値を使用できるようになります。 生成された Java™ プログラムでは、この値が -2147483648 以上 2147483647 以下の範囲になければなりません。 生成された COBOL プログラムでは、この値が 0 以上 512 以下の範囲内になければなりません。

戻り値のその他の詳細については、returnCodeを参照してください。

sysVar.returnCode
オペレーティング・システムに戻される値が含まれているシステム変数。

詳細については、『sysVar.returnCode』を参照してください。

label2
この構文は、マイグレーション済みプログラムとの互換性のためにのみ提供されます。 この構文を使用して、main 関数内の指定したラベルにジャンプします。新規コードではラベルを使用しないでください。

以下は、ネストしたコード・ブロックの例です。
// 残高がゼロ以外である最初の 100 人の顧客を印刷
while (getCustomer() != 0)
  for(i from 1 to 100 by 1)
    if (myCustomer.customerBalance == 0)
      exit for;
    end
    printBalance(myCustomer);
  end
end

ここで、exit for 文は、 最初の while 文にコントロールを戻し、再度ループします。 for 修飾子を指定しない場合、exit 文は if 文を中断し、for ループに戻ります。

エラー条件

終了するブロックのタイプを指定しても、exit 文が指定されたループ内にないと、検証エラーが発生します。

また、exit 文は、指定したブロックと同じ関数内になければなりません。 つまり、while ループ内から functionA を呼び出す場合に、 functionA 自身に while ループが含まれていないと、 exit while 文をその関数内に組み込むことはできません。

互換性

表 1. exit の互換性に関する考慮事項
プラットフォーム 問題
JavaScript 生成 Rich UI は、次の exit ステートメントの変形のみを サポートします。exit forexit ifexit while、および exit case

フィードバック