loop
式 を使用すると、ループのすべての イテレーション に対してループ ブロック が繰り返されます。
loop
の動作の例としては、以下の GIF ようなフォートナイトのエモートのクリーン スイープがあります。この GIF は、最後までプレイすると最初から繰り返され、プレイヤーのエモートはループ バックの式のようになります。
# GIF
loop:
DoCleanSweepEmote()
GIF のように、ループ バックは他の動作を指示されない限り永久に繰り返されます。これは 無限ループ と呼ばれます。
無限ループはプログラムの進行をブロックし、ほとんどの場合にそれほど役に立たないため、Verse には終了か一時停止、またはその両方の手段が用意されています。
- End (終了):
break
かreturn
のいずれかで終了することにより、ループを終わらせることができます。 - Suspend (一時停止):これが
async
式で使用されている場合、ループを一時停止できます。詳細については、「並列処理の概要」を参照してください。
同じループでこれらの両方を行うこともできます。次の例では、生成される乱数が 20 未満になるまでループ ブロックが繰り返されます。
loop:
# 乱数を生成します
RandomNumber : int = GetRandomInt(0, 100)
# 乱数が 20 より小さいか確認します
if (RandomNumber < 20):
# ループを終了します
break
これは以下の構文になっています。
expression0
loop:
expression-block
if (test-arg-block):
break
expression-block
expression2
他のいくつかの 制御フロー 式とは異なり、loop 式は void
を返すため、結果を返す式が必要な場合は役に立たない可能性があります。関数 内にループがある場合は return
で値を返せますが、そうするとループだけでなく関数も終了します。
ネスティングされた loop 式
1 つのループを別のループ内に ネスティング できます。1 番目のループは 外部ループ と呼ばれることがあり、2 番目のループは 内部ループ と呼ばれます。内部ループで break
式 を実行すると、内部ループから抜け出すだけで処理が終了します。
以下の例では、外部ループが expression3
まで続きます。そして内部ループの後に if
式があり、expression1
と内部ループをもう一度実行できます。
expression0
# 外部ループ
loop:
expression1
# 内部ループ
loop:
expression2
if (test-arg-block0):
# 内部ループを終了します
break
expression3
if (test-arg-block1):
# 外部ループを終了します
break
expression4