Breaking with a Value
break hand back a result, so the loop itself becomes the answer to a question.In this page:
Returning a Value on Break
When a loop is exited using break some_value;, that value becomes the result of the entire loop expression, which can then be stored in a variable.
Example: Returning a Value on Break
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter;
}
};
println!("Loop returned: {}", result);
}
Login to try C/C++/Java/PHP code in the editor
Multiple break Points
A single loop can contain more than one break statement along different code paths, as long as every one of them produces a value of the same type.
Example: Multiple break Points
fn main() {
let mut n = 1;
let outcome = loop {
n *= 2;
if n > 100 {
break "too big";
}
if n == 64 {
break "found sixty-four";
}
};
println!("{}", outcome);
}
Login to try C/C++/Java/PHP code in the editor
Why Only loop Supports This
while and for loops can also end because their condition became false or the iterator was exhausted, so there is no single guaranteed exit value to return. loop has no implicit exit, so break value is unambiguous.
Example: Why Only loop Supports This
fn main() {
let target = 5;
let mut current = 0;
let found_at = loop {
current += 1;
if current == target {
break current;
}
};
println!("Found target at iteration {}", found_at);
}
Login to try C/C++/Java/PHP code in the editor
Combining with match on the Result
Because break value produces an ordinary value, you can immediately use it with other expressions, such as feeding it directly into a match.
Example: Combining with match on the Result
fn main() {
let mut i = 0;
let parity = loop {
i += 3;
if i > 10 {
break i % 2;
}
};
match parity {
0 => println!("Ended on an even number"),
_ => println!("Ended on an odd number"),
}
}
Login to try C/C++/Java/PHP code in the editor
- Trying to use
break value;inside afororwhileloop -- onlyloopcan return a value this way. - Forgetting a semicolon after a
loopexpression when assigning its result, since the wholeloop {}is treated as one expression. - Mismatching the types produced by different
breakstatements within the sameloop, which fails to compile.
break value;only works insideloop, because onlyloopis guaranteed to be exited exclusively viabreak.- The value passed to
breakbecomes the value of the entireloopexpression. - All
breakstatements within the sameloopmust produce values of the same type. - This pattern is common for retry-until-success logic where the result is only known once the loop ends.
Chapter Quiz — Complete all 7 topics to unlock
0/7 topics done
Complete these topics first: