Structs, Enums and Traits
Rust Pattern Matching with match
Compare a value against values, ranges, tuples and guards, and let the compiler check you covered everything.
What you'll learn
- match arms
- Ranges, | and guards
- if let
match n
0"zero"1 | 2 | 3"small"4..=9"medium"_"large"The first pattern that fits wins
match compares a value with a list of patterns and runs the first one that fits. Patterns can be single values, several values, ranges, tuples, or a name that catches everything else.
1 | 2 | 3 matches any of the three values and 4..=9 matches a range. n if n < 0 is a guard: the pattern matches only when the condition is true. _ catches everything that is left. if let is a short match for a single pattern.
Key points
- 1 | 2 | 3 matches any of the three.
- 4..=9 matches a range.
- _ catches everything else.
Runnable Rust example
Rust
main.rs
fn classify(n: i32) -> &'static str {
match n {
0 => "zero",
1 | 2 | 3 => "small",
4..=9 => "medium",
n if n < 0 => "negative",
_ => "large",
}
}
fn main() {
for n in [0, 2, 7, -5, 42] {
println!("{n}: {}", classify(n));
}
let point = (0, 8);
match point {
(0, y) => println!("on the y axis at {y}"),
(x, 0) => println!("on the x axis at {x}"),
(x, y) => println!("at ({x}, {y})"),
}
let maybe = Some(3);
if let Some(value) = maybe {
println!("got {value}");
}
}
0: zero
2: small
7: medium
-5: negative
42: large
on the y axis at 8
got 3Practice
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.
- Triangle Classification Classify three side lengths as invalid, equilateral, isosceles, or scalene. Easy
- Point Quadrant Find which quadrant a point lies in. Easy