blob: e9e636485bca968d5cb71e80a6ae38e15deb350e [file] [log] [blame] [view] [edit]
# Patterns and Matching
_Patterns_ are a special syntax in Rust for matching against the structure of
types, both complex and simple. Using patterns in conjunction with `match`
expressions and other constructs gives you more control over a programs control
flow. A pattern consists of some combination of the following:
* Literals
* Destructured arrays, enums, structs, or tuples
* Variables
* Wildcards
* Placeholders
Some example patterns include `x`, `(a, 3)`, and `Some(Color::Red)`. In the
contexts in which patterns are valid, these components describe the shape of
data. Our program then matches values against the patterns to determine whether
it has the correct shape of data to continue running a particular piece of code.
To use a pattern, we compare it to some value. If the pattern matches the value,
we use the value parts in our code. Recall the `match` expressions in Chapter 6
that used patterns, such as the coin-sorting machine example. If the value fits
the shape of the pattern, we can use the named pieces. If it doesnt, the code
associated with the pattern wont run.
This chapter is a reference on all things related to patterns. Well cover the
valid places to use patterns, the difference between refutable and irrefutable
patterns, and the different kinds of pattern syntax that you might see. By the
end of the chapter, youll know how to use patterns to express many concepts in
a clear way.