Rust
Beginner
1 min read
Option<T> and if let
Example
fn find_first_even(nums: &[i32]) -> Option<i32> {
for &n in nums {
if n % 2 == 0 {
return Some(n);
}
}
None
}
fn divide(a: f64, b: f64) -> Option<f64> {
if b == 0.0 { None } else { Some(a / b) }
}
fn main() {
let numbers = vec![1, 3, 7, 4, 9];
// if let — only runs when Some
if let Some(even) = find_first_even(&numbers) {
println!("first even: {even}");
} else {
println!("no even numbers found");
}
// Combinators
let result = find_first_even(&numbers)
.map(|n| n * n)
.unwrap_or(0);
println!("first even squared (or 0): {result}");
// Chaining Options
let doubled = divide(10.0, 2.0)
.and_then(|q| divide(q, 2.0))
.map(|v| v * 3.0);
println!("chained result: {:?}", doubled);
// Division by zero
println!("10 / 0 = {:?}", divide(10.0, 0.0));
// while let — pop from a stack until empty
let mut stack = vec![1, 2, 3];
while let Some(top) = stack.pop() {
print!("{top} ");
}
println!();
// unwrap_or_else
let odds_only = vec![1, 3, 5];
let val = find_first_even(&odds_only).unwrap_or_else(|| -1);
println!("fallback value: {val}");
}