Chapter 4. Pattern Matching
At first glance, pattern-matching expressions look like the familiar case statements from your favorite C-like language. In the typical C-like case statement you’re limited to matching against values of ordinal types and triggering trivial expressions for matches. For example, “In the case that i is 5, print a message; in the case that i is 6, exit the program.”
With Scala’s pattern matching, your cases can include types, wildcards, sequences, regular expressions, and even deep inspections of an object’s state. This deep inspection follows a protocol that allows the type implementer to control the visibility of internal state. Finally, the exposed state is easy to capture to variables for use. Hence, the terms “extraction” or “destructuring” are sometimes used for this capability.
Pattern matching can be used in several code contexts. We’ll start with the most common usage, within match clauses. Afterwards, we’ll show other uses. We saw two relatively simple examples of match clauses in our actor example in “A Taste of Concurrency”. We also discussed additional uses in “Partial Functions”.
A Simple Match
To begin with, let’s simulate flipping a coin by matching the value of a Boolean:
// src/main/scala/progscala2/patternmatching/match-boolean.scvalbools=Seq(true,false)for(bool<-bools){boolmatch{casetrue=>println("Got heads")casefalse=>println("Got tails")}}
It looks just like a C-style case statement. As an experiment, try commenting ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access