DEV Community

Cover image for Pattern Matching With Functions
Diego Novais
Diego Novais

Posted on

4 2

Pattern Matching With Functions

Hey, dev!

Imagine a scenario where you need to compare 2 numbers and return which one is the biggest.

In Elixir, we can do it by using an ternary if statement:

defmodule CompareNumbers do
  def the_bigger_number_is(number_01, number_02) do
    bigger_number = if number_01 > number_02, do: number_01, else: number_02

    "The number #{number_01} is greater than #{number_02}"
  end
end

number_01 = 10
number_02 = 5

IO.inspect(CompareNumbers.the_bigger_number_is(number_01, number_02))

=> "The number 10 is greater than 5"
Enter fullscreen mode Exit fullscreen mode

...

We can also use Pattern Matching With Functions to control the flow:

defmodule CompareNumbers do
  def the_bigger_number_is(number_01, number_02) do
    compare(number_01 > number_02, number_01, number_02)
  end

  defp compare(true, number_01, number_02) do
    "The number #{number_01} is greater than #{number_02}"
  end

  defp compare(false, number_01, number_02) do
    "The number #{number_02} is greater than #{number_01}"
  end
end

number_01 = 10
number_02 = 5

IO.inspect(CompareNumbers.the_bigger_number_is(number_01, number_02))

=> "The number 10 is greater than 5"
Enter fullscreen mode Exit fullscreen mode

Here, we create 2 private functions with the same name compare, and then, with pattern matching, we check if the first argument is true or false.

So, which of the 2 approaches above do you think is the best? Which makes the most sense?

Or, how could be better? Let me know in the comments below =D

Contacts
Email: contato@diegonovais.com.br
Linkedin: https://www.linkedin.com/in/diegonovais/
Twitter: https://twitter.com/diegonovaistech

Postmark Image

Speedy emails, satisfied customers

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

Sign up

Top comments (2)

Collapse
 
yasir_asarudeen profile image
Yasir Asarudheen

Nice post, I would prefer guard condition

defmodule CompareNumbers do
  def the_bigger_number_is(number_01, number_02) when number_01 > number_02 do
    "The number #{number_01} is greater than #{number_02}"
  end

  defp compare(number_01, number_02) do
    "The number #{number_02} is greater than #{number_01}"
  end
end

number_01 = 10
number_02 = 5

IO.inspect(CompareNumbers.the_bigger_number_is(number_01, number_02))

=> "The number 10 is greater than 5"
Enter fullscreen mode Exit fullscreen mode
Collapse
 
dnovais profile image
Diego Novais

Great! And well remembered! The guard condition approach made the code cleaner. Thank you!

The best way to debug slow web pages cover image

The best way to debug slow web pages

Tools like Page Speed Insights and Google Lighthouse are great for providing advice for front end performance issues. But what these tools can’t do, is evaluate performance across your entire stack of distributed services and applications.

Watch video