| # 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 program’s 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 doesn’t, the code |
| associated with the pattern won’t run. |
| |
| This chapter is a reference on all things related to patterns. We’ll 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, you’ll know how to use patterns to express many concepts in |
| a clear way. |