Euphoria-until-statement

提供:Dev Guides
移動先:案内検索

Euphoria-ループまでの文

*loop ... until* ループはwhileループに似ていますが、loop ... untilループが少なくとも1回実行されることが保証されている点が異なります。

構文

ループの構文…​までは次のとおりです-

loop do
   -- Statements to be executed.
until expression

式はループの最後に表示されるため、式の値がテストされる前にループ内のステートメントが1回実行されることに注意してください。

式がtrueを返す場合、制御のフローはジャンプして戻り、ループ内のステートメントが再度実行されます。 このプロセスは、式が偽になるまで繰り返されます。

#!/home/euphoria-4.0b2/bin/eui

integer a = 10

loop do
   printf(1, "value of a : %d\n", a)
   a = a + 1
until a < 20

これは、次の結果を生成します-

value of a : 10
value of a : 11
value of a : 12
value of a : 13
value of a : 14
value of a : 15
value of a : 16
value of a : 17
value of a : 18
value of a : 19

_loop …​. with entry_ステートメント

多くの場合、ループの最初の繰り返しは何らかの形で特別なものです。 ループを開始する前に、いくつかのことを行う必要があります。 これらは、ループを開始するステートメントの前に行われます。

*with entry* ステートメントは、目的を非常によく果たします。 loop ... untilでこのステートメントを使用し、最初の反復を開始したい時点で *entry* キーワードを追加する必要があります。

構文

ループの構文…​エントリを持つループまでは次のとおりです-

loop with entry do
   -- Statements to be executed.
entry
   -- Initialisation statements.
until expression

_expression、_を実行する前に、初期化ステートメントを実行し、通常のループとして開始します。 後で、これらの初期化ステートメントはループ本体の一部になります。

#!/home/euphoria-4.0b2/bin/eui

integer a = 10

loop with entry do
   printf(1, "value of a : %d\n", a)
   a = a + 1
entry
   a = a + 2
until a > 20

これは、次の結果を生成します-

value of a : 12
value of a : 15
value of a : 18

_loop …​. label_ステートメント

*loop ... until* ループには、最初の *do* キーワードの直前に *label* 句を含めることができます。 *enter* 句の前または後にlabel句を保持できます。

このラベルはループブロックに名前を付けるためだけに使用され、ラベル名は単一または複数の単語を含む二重引用符で囲まれた定数文字列でなければなりません。 labelキーワードは大文字と小文字が区別されるため、 label と記述する必要があります。

構文

ループの構文は、ラベル句があるまで次のとおりです-

loop label "Label Name" do
   -- Statements to be executed.
until expression

ネストされたループを使用する場合、ラベルは非常に役立ちます。 continue または exit ループ制御ステートメントをラベル名とともに使用して、ループのフローを制御できます。

#!/home/euphoria-4.0b2/bin/eui

integer a = 10
integer b = 20

loop label "OUTER" do
   printf(1, "value of a : %d\n", a)
   a = a + 1

   loop label "INNER" do
      printf(1, "value of b : %d\n", b)
      b = b + 1

      if b > 25 then
         continue "OUTER"  -- go to start of OUTER loop
      end if
   until b > 30
until a > 20

これは、次の結果を生成します-

value of a : 10
value of b : 20
value of b : 21
value of b : 22
value of b : 23
value of b : 24
value of b : 25
value of a : 11
value of b : 26
value of a : 12
value of b : 27
value of a : 13
value of b : 28
value of a : 14
value of b : 29
value of a : 15
value of a : 16
value of a : 17
value of a : 18
value of a : 19

-上記の例は説明どおりに動作するはずですが、Euphoriaインタープリターには問題があり、Euphoriaの将来のバージョンで修正される可能性があるため、期待どおりに動作しているようです。