snippetrustModeratepending
Rust Option and pattern matching -- handling nullable values
Viewed 0 times
OptionNoneSomeunwrapmapif letpattern matching
rust
Problem
Need to safely handle values that may or may not exist. Null pointer dereferences are a major source of bugs in other languages.
Solution
Rust Option<T> forces explicit handling of None. Use pattern matching, if let, and combinators for clean code.
Code Snippets
Option handling patterns
fn find_user(id: u32) -> Option<User> {
users.iter().find(|u| u.id == id).cloned()
}
// Pattern matching
match find_user(42) {
Some(user) => println!("Found: {}", user.name),
None => println!("Not found"),
}
// if let (when you only care about Some)
if let Some(user) = find_user(42) {
send_email(&user.email);
}
// Combinators
let name = find_user(42)
.map(|u| u.name.to_uppercase())
.unwrap_or_else(|| "Unknown".to_string());
// ? operator (in functions returning Option)
fn get_street(id: u32) -> Option<String> {
let user = find_user(id)?;
let addr = user.address.as_ref()?;
Some(addr.street.clone())
}
// NEVER use .unwrap() in production
// Use .expect("reason") for programmer errors onlyRevisions (0)
No revisions yet.