Namaran

Code daily. Without assist.

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(その後に改行)。n1, 2, 4, 8, 16, 32と2倍になっていき、32 > 20になった時点でbreak n;が実行されます。whileforには「条件を満たす間だけ回る」という終了条件が構文に組み込まれていますが、loopにはそれがなく、明示的にbreakしない限り無限ループになります。その代わりloopは式であり、breakに値を添えることでその値がloop式全体の値になります(ここではresult32が入る)。whileforは評価結果が常に()で値を持ち出せないので、ループの結果を変数へ渡したいときは、このloop + break値という形が使われます。