Skip to main content

Posts

Showing posts from December, 2017

Elixir: Pattern Matching - A Taste of Functional Programming

= is a match operator
After an initial assignment it then becomes a match assertion.
num = 1
To check the match assertion you can try this and it will be valid
1 = num
Furthermore, these are also valid:
[1] = [1] [num] = [num]
Destructuring
[score1, score2, score3] = [89, 93, 87] IO.puts score1  # 89 IO.puts score2  # 93 IO.puts score3  # 87
{:ok, value} = {:ok, 1000} IO.puts value # 1000 {:error, message} = {:error, "Uh oh"} IO.puts message # "Uh oh"
Error when matching:
{:foo, value} = {:bar, "nope"} ** (MatchError) no match of right hand side value: {:bar, "nope"}
Matching function arguments
Various function definitions and subsequent calls:
def sum_two_nums(num1, num2) do num1 + num2 end sum_two_nums(2,5) def sum_two_nums(%{num1: num1, num2: num2}) do num1 + num2 end sum_two_nums(%{num1: 2, num2: 5}) def sum_two_nums([num1, num2]) do num1 + num2 end sum_two_nums([2,5])
There's so much more you can do with pattern matching. It…

Elixir: Anonymous Functions - A Taste of Functional Programming

An anonymous function is composed of an optional parameter list, a body enclosed by fn -> and end. It returns a function definition and the potential for the function to be executed. Quite simply the anonymous function can be assigned to a variable which then can be subsequently called.

Define an anonymous function:,
greet = fn -> IO.puts "Hello World" end Of course that does nothing unless we call it! We can do that by using this dot notation -
[function name].([optional parameters]) Like this:
greet.() Where the output is: Hello World

Anonymous functions with parametersadd = fn(num1, num2) -> num1 + num2 end IO.puts add.(10, 15) IO.puts add.(12, 15) IO.puts add.(14, 19) subtract = fn num1, num2 -> num1 - num2 end IO.puts subtract.(15, 10) Output:
25 27 33 5
I hope these examples ignite an interest for you to further learn functional programming using Elixir. Cheers!

Other posts in this series:
A Taste of Functional ProgrammingAnonymous functionsPatter…

A Taste of Functional Programming

ObjectivesIgnite an interest in those who have never explored functional programming beforeExposure to functional conceptsUse functional parts of your existing language of choice you've never used before Lead you to pursue a functional language more in-depth
Paradigm Evolution MathematicsComputer ScienceSpawn of languagesfunctionalproceduralimperativedeclarativeobject-oriented programming
OOP Limitations "We’re going to be living in a multicore, distributed, concurrent — all the buzz words — world. The conventional models we’ve been doing, the OO stuff… is not going to survive in that kind of environment." - Dave Thomas "OOP promised a cure for the scourge of software complexity. …its weaknesses have become increasingly apparent. Spreading state all over the place leads to concurrency issues and unpredictable side effects." - Dave Thomas
Thinking in FunctionsFunctionsEasy to reason aboutReliablePureDon't modify variables outside of scopeNo side effectsDeter…