Structs, Enums and Traits
Rust Option: Some and None
Rust has no null. A value that may be missing is an Option, and the compiler makes you handle None.
What you'll learn
- Some(value) and None
- match and unwrap_or
- map on an Option
find_user(id)
Some
- id 1 → Some("Ada")
- use the name
None
- id 3 → None
- handle the missing case
A value that may be missing
Rust has no null. A value that may be missing has the type Option<T>, which is either Some(value) or None. The compiler makes you handle the None case before you can use the value.
find_user returns Some for a known id and None otherwise, and match handles both. unwrap_or supplies a default when the value is missing. map changes the value inside Some and leaves None alone.
Key points
- Option<T> is
Some(value)or None. unwrap_orgives a default.- map changes the value inside Some.
Runnable Rust example
Rust
main.rs
fn find_user(id: u32) -> Option<&'static str> {
match id {
1 => Some("Ada"),
2 => Some("Linus"),
_ => None,
}
}
fn main() {
for id in [1, 3] {
match find_user(id) {
Some(name) => println!("user {id}: {name}"),
None => println!("user {id}: not found"),
}
}
let name = find_user(9).unwrap_or("guest");
println!("{name}");
let length = find_user(2).map(|name| name.len());
println!("{:?}", length);
}
user 1: Ada
user 3: not found
guest
Some(5)Practice
Open the example in the online compiler, change a value or add a line, and predict the output before you run it. Then break the code on purpose and read the compiler's message.
Finished this lesson?
Mark it as learned to track your progress.
Your progress is saved in this browser Sign in to keep it on every device.
Practice with a challenge
Use what this lesson covers to solve a real problem. Each challenge runs in your browser with instant tests and an AI review.
- First Unique Character Find the first character that appears only once. Easy
- Second Largest Value Find the second largest distinct value. Easy