while

条件式が真の間、ブロックを繰り返し実行します。

OnBoot => {
    let n = 0
    while (n < 3) {
        n += 1
        湊: ${n}回目です。
    }
}

while (条件) { ... } の形で書きます。 条件式は、ブロックを実行する前に毎回評価されます。最初から偽ならブロックは一度も実行されません。

for と違って、初期化や更新の場所がありません。 ループの外で変数を用意し、ブロックの中で自分で更新します。 条件を偽にする処理(上の例の n += 1)を忘れると、ループが終わりません。

注意: セリフの直後に代入を書かない

セリフの直後の行は、let global call if などのキーワードで始まっていない限り、セリフの続き行として読まれます。 そのため、次のようにセリフのあとに n += 1 を書くと、代入は実行されず、n += 1 という文字がセリフとして出力されます。 n が増えないので、ループは上限の2000回まで続いて打ち切られます。

// NG
while (n < 3) {
    湊: ${n}回目です。
    n += 1
}

代入などの処理は、上の例のようにセリフより前に書いてください。セリフのあとに書きたいときは、; だけの行を挟みます。 詳しくは10. 文字コード・改行・エスケープを参照してください。

break / continue / return

ループの途中で抜けたり、次の周回へ進んだりできます。詳しくはbreak / continue / returnを参照してください。

OnBoot => {
    let n = 0
    while (true) {
        n += 1
        if (n == 2) {
            continue    // 2のときは表示せず次へ
        }
        if (n > 4) {
            break       // 4を超えたら抜ける
        }
        湊: ${n}
    }
}

while (true) のように条件を常に真にして、break で抜ける書き方もできます。 return を書くと、ループだけでなくトーク(や関数)全体を終了します。

ブロックの中の変数

ブロックの中で let した変数は、その周回の中だけで使えます。 次の周回には持ち越されません。 周回をまたいで値を持ち続けたい変数は、while の前で宣言してください。

ループの上限

無限ループを防ぐため、ループは最大2000回で自動的に停止します。 上限に達すると、while 文が打ち切られたことを知らせる警告が出ます。 条件式が偽にならない書き方になっていないか確認してください。