Member-only story

Understanding if let in Rust: A Friendly Dive into Conditional Destructuring

Adam Szpilewicz
3 min readMar 27, 2025
Photo by Karl Pawlowicz on Unsplash

Rust is famous for its powerful pattern matching, and one of the elegant features it offers is the if let construct. It might look like a strange cousin of the regular if statement, but once you understand it, you'll find yourself using it all the time—especially when working with Option or Result.

In this article, we’ll break down what if let does, when to use it, and go through a few practical examples to solidify your understanding.

🧠 What’s the Problem?

Let’s say you’re working with an Option<T>, like so:

let some_number = Some(7);

Now, you want to do something only if the value is Some, but you don’t care about the None case. A match works fine:

match some_number {
Some(x) => println!("The number is: {}", x),
None => {}
}

…but that None => {} is boilerplate you might want to avoid.

✅ Enter if let

if let allows you to match just one pattern and ignore the rest:

if let Some(x) = some_number {
println!("The number is: {}", x);
}

That’s it. It says, “If this pattern matches, run the block.”

🛠️ Example 1: Handling Options

fn main() {
let favorite_color: Option<&str> = Some("blue");

if let Some(color) = favorite_color {
println!("Your favorite color is {}", color);
}
}

If favorite_color is Some, we extract the value and print it. If it's None, nothing happens—and we don’t need to write a match.

🛠️ Example 2: Unwrapping Results

fn get_username(user_id: u32) -> Result<String, &'static str> {
if user_id == 0 {
Err("Invalid user ID")
} else {
Ok("Alice".to_string())
}
}

fn main() {
if let Ok(name) = get_username(1) {
println!("Username: {}", name);
}
}

Same idea here — if let works with Result too. We're checking for the Ok variant and ignoring the Err.

🛠️ Example 3: if let with else

Adam Szpilewicz
Adam Szpilewicz

Written by Adam Szpilewicz

Backend software engineer working with golang and python @Rivery (https://rivery.io/). I like writting and reading about code and software engineering.

No responses yet

Write a response