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 文が打ち切られたことを知らせる警告が出ます。
条件式が偽にならない書き方になっていないか確認してください。