2026-09-21
loop_break.rs
fn main() {
let mut n = 1;
let result = loop {
n *= 2;
if n > 20 {
break n;
}
};
println!("{result}");
}
このコードは何を出力するでしょうか?
Answer
32(その後に改行)。nは1, 2, 4, 8, 16, 32と2倍になっていき、32 > 20になった時点でbreak n;が実行されます。whileやforには「条件を満たす間だけ回る」という終了条件が構文に組み込まれていますが、loopにはそれがなく、明示的にbreakしない限り無限ループになります。その代わりloopは式であり、breakに値を添えることでその値がloop式全体の値になります(ここではresultに32が入る)。while・forは評価結果が常に()で値を持ち出せないので、ループの結果を変数へ渡したいときは、このloop + break値という形が使われます。