Let's dive right in.
Rethink Assignment
In programming, you typically assign a variable with an =
sign. In math, =
means something else entirely. It means the two terms on either side of the sign are equivalent. That's the way it is with Elixir.
When Elixir sees an =
it will try to make both sides equivalent. When you call a function, Elixir will do the same thing with the arguments you pass: pattern matching against the function's argument list.
You've already seen a little of this in the previous chapters. Let's take a look at a few more examples (feel free to open up iex and type these examples in):
#a simple assignmentpattern = "match""pat" <> tern = "pattern match"#a little weirder, the variable 'tern' = "tern match"[1, x, 5] = [1, 10, 5]#something straightforward: x = 10
This is, in a sense, destructuring assignment that you would see in JavaScript, Ruby, ES6:
var [x, y, z] = [1,2,3];
But Pattern Matching is a whole lot more than this. While you can indeed use it to assign values, it's much more useful when used with function calls.