Elixir’s pattern matching is similar to Erlang’s (the main difference being that Elixir allows a match to reassign to a variable that was assigned in a prior match, whereas in Erlang a variable can be assigned only once).
Joe Armstrong, Erlang’s creator, compares the equals sign in Erlang to that used in algebra. When you write the equation x = a + 1, you are not assigning the value of a + 1 to x. Instead you’re simply asserting that the expressions x and a + 1 have the same value. If you know the value of x, you can work out the value of a, and vice versa.
His point is that you had to unlearn the algebraic meaning of = when you first came across assignment in imperative programming languages. Now’s the time to un-unlearn it.
That’s why I talk about pattern matching as the first chapter in this part of the book. It is a core part of Elixir—we’ll also use it in conditions, function calls, and function invocation.
But really, I wanted to get you thinking differently about programming languages and to show you that some of your existing assumptions won’t work in Elixir.
And speaking of existing assumptions…the next chapter kills another sacred cow. Your current programming language is probably designed to make it easy to change data. After all, that’s what programs do, right? Not Elixir. Let’s talk about a language in which all data is immutable.