制御フロー
条件分岐は式・文・ブロックで説明しています。ここでは繰り返しとループからの移動を扱います。
条件が true の間、本体を繰り返します。条件の () は任意で、条件は繰り返すたびに評価します。
remaining = 3;while remaining > 0 { print remaining; remaining -= 1;}条件は bool である必要があります。本体は {} で囲み、通常どおり終了するときには () になるように書きます。たとえば本体の末尾に remaining だけを残すことはできません。
整数範囲の for
Section titled “整数範囲の for”start..end は終点を含まず、start..=end は終点を含みます。1ずつ増える整数範囲だけに対応しています。
for i in 0..3 { print i; // 0, 1, 2 をそれぞれ1行に出力}for i in 1..=3 { print i; // 1, 2, 3}始点と終点は同じ整数型である必要があります。始点が終点より大きい範囲は空です。同じ場合は、.. なら0回、..= なら1回実行します。
両端はループに入る前に左から右へ一度だけ評価します。本体から終点の元になった変数を変更しても、繰り返す範囲は変わりません。
end = 3;for i in 0..end { end = 0; print i; // 0, 1, 2}ループ変数は本体にだけ存在します。外側に見えている同名変数があるとエラーです。前のループが終われば、そのループ変数名を次のループで再利用できます。
ループ変数は変更できますが、繰り返し自体の進行は別に管理します。代入しても次の反復の値は変わりません。
for i in 0..3 { i += 10; print i; // 10, 11, 12}終点を含む範囲では、終点に到達したあとにカウンターを増やさず終了します。このため、i32・i64 の最大値を終点にできます。
break と continue
Section titled “break と continue”break; は最も内側のループを終了し、continue; はそのループの次の反復へ進みます。ループの外では使えません。
sum = 0;for i in 0..10 { if i == 2 { continue; } if i == 5 { break; } sum += i;}print sum; // 8ループ本体の中で、ブロック式に書いた場合も同じループに作用します。
ループの制約
Section titled “ループの制約”while の条件式では break と continue を使えません。必要な判定は本体に書いてください。
value = 0;while true { if value == 3 { break; } print value; value += 1;}また、型検査器は while true を無限ループだと確定せず、ループが終了する可能性を残します。関数の戻り値を検査するときも同じです。
fn example() -> i32 { while true { return 1; } 0 // 型検査に必要な末尾式。実行時にはここへ到達しない}
print example();実装の参照先: ループと制御フローの検査、範囲・ジャンプの C++ 出力。