Next: , Previous: , Up: Control Structures   [Contents][Index]


6.9.4 Begin loops with multiple exits

カウント・ループの場合、 複数箇所で leave を使用できます。 begin ループの場合は、 以下の選択肢があります:

ループ内で exit を使用(複数記述できます)すると、 ループだけでなくコロン定義全体からも去ります。 例:

: foo
  begin
    condition1 while
      condition2 if
        exit-code2 exit then
      condition3 if
        exit-code3 exit then
    ...
  repeat
  exit-code1 ;

このアプローチの欠点は、 ループ後に共通コードが必要な場合、 共通コードを含む別のワードで foo を包むか、 または、 それぞれの exit-code から共通コードを呼び出す必要があることです。

もう 1 つのアプローチは、 begin ループ内で複数の while を使用することです。 追加の while ごとにループの後ろに then を追加する必要があります。 例:

begin
  condition1 while
    condition2 while
      condition3 while
again then then then

ここでは、 ループの最後に again を使用して、 各 whilethen を用意しました。 repeatthen を 1 つ減らしますが、 それ以外の場合は同じ動作になります。 これが機能する理由の説明については、 See Arbitrary control structures をご覧下さい。

後で共通のコードを使用することはできますが、 上で示したように、 異なる出口(exit)に対して異なる exit-code を使用することはできません。 以下のようにすると、 これらの異なる exit-code を使用できます:

begin
  condition1 while
    condition2 while
      condition3 while
again then exit-code3
else exit-code2 then
else exit-code1 then

exit-code は終了条件から比較的離れているため、 これを理解するのは比較的困難です(このような制御構造に慣れていないことも理由にはなりません)。