How to Use Pattern Matching in Elixir | by Eduardo Lalangas Rico Sotomayor | Jul, 2022

Understand how the equals operator truly works

Taken from https://elixir-lang.org/

This is likely one of the issues I like about Elixir; it’s a type of very highly effective options that I take advantage of on daily basis and that I miss once I use Python or different programming languages.

The task operator “=” is an equivalence operator. In Elixir, we make a variable equal to a price and vice versa. Let’s see an instance: assigning the variable x the worth of “hi there.”

Thus we will make an analysis of the worth with the variable in order that it returns the unique worth.

Once we consider the variable with a price apart from “hi there,” it can give us a MatchError error. The one potential means it could possibly work is that if the variable is on the left facet of the operation. Nonetheless, this overwrites our authentic variable.

MatchError error.

Beforehand we talked about a number of information buildings, the tuples. We mentioned they had been just like lists, however they’re saved in a different way in reminiscence. The kind of construction is essential speaking about information decomposition with Sample Matching. We are going to see it shortly. First, let’s see an instance of the destructuring of a tuple.

If we now have three components in our tuple, we will initialize a variable for every of those components in a quite simple means:

Thus, in x, we now have the atom :hi there, and in y, the atom :world , and so forth.

Results of Sample Matching

This works by matching the variety of variables to the variety of values. If we now have fewer values than variables, we’ll get a MatchError error.

MatchError error as a result of a mismatch of Sample Matching

We can not assign variables on this means when the kind of construction is completely different, For instance, evaluating tuples with a listing.

MatchError error as a result of a mismatch of Sample Matching

Many instances, in Phoenix, we now have, on account of operations, a tuple the place the primary worth is an atom of kind :okay (or :error) and the second worth is the end result (or the rationale for the error), and these atoms should match on either side of the = operator.

MatchError error as a result of a mismatch of Sample Matching and results of the analysis.

For the destructuring of lists, we will extract the primary factor (or the final components) in an identical, quite simple means: assigning a variable referred to as head to the primary factor, then putting the operator | and putting a variable the place the remainder of the weather of the listing might be.

Results of the analysis

We will destructure a number of components, not solely the primary one. Let’s see an instance the place we extract the primary two components:

Results of the analysis

An empty listing can’t be assigned to 2 variables as a result of there are not any matching components.

MatchError error.

And this is similar cause why the perform hd/1 (or tl/1) doesn’t work with an empty listing. Returning an error of kind ArgumentError within the case of capabilities or a MatchError as within the earlier case.

ArgumentError message

Let’s say we now have a listing to which we need to add a component initially. What we may do is use the ++ operator between the lists. Nonetheless, we will additionally use Sample Matching for this.

Or, as I mentioned, use the ++ operator. Nonetheless, we must put our factor in a brand new listing.

Variables in Elixir will be reassigned or overwritten. Typically, this isn’t what we would like; generally, what we would like is to do a Sample Matching. Let’s see it extra clearly with the instance initially of this submit.

If we need to see if x is equal to a different worth, we must make use of the pin operator. That is so it may be matched as an alternative of reassigned.

MatchError error.

That is very helpful once we have already got an initialized variable and we need to know if the results of an operation has that worth to assign a brand new variable to the remainder of the operation. Right here’s an instance:

As there’s a Match, now we now have in our variable x the string “it is a end result from one other operation.” If there isn’t any Match, we get an error of kind MatchError, and our variable x is just not assigned something.

MatchError error.

This occurs as a result of we’re evaluating :yes_it_is with :nope atoms, however they aren’t the identical.

MatchError error.

We are sometimes not fascinated about saving the results of an operation in a variable. Nonetheless, because of the variety of components that the end result returns, we now have to put a variable so the Sample Matching works accurately.

For this, we use the _ that represents a price that’s going to be ignored within the sample. Let’s see an instance with the earlier code.

If we don’t need to use the string that provides us the appropriate facet of the task, we nonetheless have to put a variable for the Sample Matching to work. The next doesn’t work:

MatchError error.

So we determined to put it as follows:

Results of the analysis

As you’ll be able to see, Sample Matching is a really elegant device for extracting data. It offers versatility and, for my part, it’s a lot quicker to work this manner. If you understand JS, you’ll certainly be aware of this manner of declaring variables.

Within the subsequent submit, we’ll see the completely different management buildings in Elixir and the way they relate to Sample Matching.

Right here’s a hyperlink to the first part of this collection.

More Posts