DEV Community

Cover image for 49 Days of Ruby: Day 26 - Pattern Matching
Ben Greenberg
Ben Greenberg

Posted on

4 3

49 Days of Ruby: Day 26 - Pattern Matching

Welcome to day 26 of the 49 Days of Ruby! 🎉

Patterns! Today we are going to discuss the exciting topic of pattern matching in Ruby.

Pattern matching is a relatively new phenomenon in the language. It was introduced in Ruby 2.7, and further enhancements have continued through to the Ruby 3.0 major release.

What is pattern matching?

Pattern matching is searching for a given sequence.

It allows for matching inside objects for a specific content structure.

Pattern matching can be a very helpful tool and offers you a lot of powerful utility as you build out applications!

Pattern matching in Ruby

How do we implement pattern matching in Ruby?

The basic structure is the following for a pattern matching statement:

case statement
in pattern ...
  ...
in pattern ...
  ...
else
  ...
end
Enter fullscreen mode Exit fullscreen mode

It starts with the statement or expression that we are matching against: case [1, 2]

Let's take a look at an example from Woman on Rails:

case [1, 2]
in [2, a]
  :no_match
in [1, a]
  :match
end
# => :match

> a
# => 2
Enter fullscreen mode Exit fullscreen mode

In the above example, we are matching against an array of two integers. We look for two versions of that array: [2, a] and [1, a].

The array we're matching against fits the second in clause. Thus, when we match against a, the return value is 2.

Another great example is matching inside of a hash:

case { coffee: "Americano", tea: "Earl Gray" }
in { coffee: "Americano", tea: "Green" }
  :no_match
in { coffee: "Americano", tea: x }
  :match
end
  # => :match

> x
# => "Americano"

Enter fullscreen mode Exit fullscreen mode

There is so much more to learn about pattern matching in Ruby! Check out the Ruby docs to see a lot more examples of use cases!

That's it for today. See you tomorrow!

Come back tomorrow for the next installment of 49 Days of Ruby! You can join the conversation on Twitter with the hashtag #49daysofruby.

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (1)

Collapse
 
codeandclay profile image
Oliver •

Thanks for the introduction. Pattern matching is completely new to me. What would some real-world use cases be?

Also, should x in the second example evaluate to "Earl Gray"?

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more