Introduction to functional programming, with Elixir

Preview:

Citation preview

Introduction to Functional Programmingwith Elixir

Unlearn you some OOP for great good

● OOP is not the only good way to design software

● Assignment & Control flow are not essential to programming

● Locks & Semaphores are not essential to concurrency

Learn you some Functional Programming for good

Functional Programming

● Another programming paradigmo Functions as first class citizenso Higher order functionso Immutable datao Pure functions

Pure Functions

● Stateless● Produces the same output always for

the same input● No side effects

Functional Programming Languages

● Haskell● Erlang/Elixir● Common Lisp and more

● Scala● JavaScript● more

The functional programming Boom

● Physical constraints● Need for:

o Simple concurrency and parallelismo Easier vertical and horizontal scalingo Optimal utilization of resources

Emerging Languages

● Go● Scala● Erlang● Elixir● Rust● Haskell● Nimand more

Elixir?

● Built on top of the Erlang VM● Compiles down to BEAM bytecode

Wth is Erlang?

● Designed for scalability and real-time systems

● Functional● Simplifies concurrent programming● Fault-tolerant (‘let it crash’ philosophy)● Bytecode runs on the Erlang VM

Erlang is used by

● Facebook (Chat)● Amazon● Whatsapp● Yahoo!● Heroku● Github● and more

Story of Whatsapp

● 2 Million connections on a single node● 450 Million users handled by 32

engineers● Acquired by Facebook for $19 Billion● Backend powered by Erlang

Elixir

● Dynamic● Functional● Built on top of the Erlang VM

o implies Concurrent, Distributed and Fault-tolerant

● 1.0.0 was released in Sep 2014● Created by Jose Valim

Why use Elixir?

● All the benefits of Erlang● Easily reuse Erlang libraries

o No additional performance costs● Better tooling, which allows for greater

productivity● Better syntax● Simplified metaprogramming

Concurrency!

Concurrency in erlang/elixir vs other languages is like branching in git vs subversion.

● Its simple and cheap

Everything is an expression

World of Elixir

DataModules

Processes

Datatypes

● Atoms● Integers● Floating point numbers● Binaries● Tuples● Lists● Strings and Character lists● Maps, Hashdicts and Keyword Lists

Modules

● Means of organizing code● Contains all named functions

Functions

● Elixir functions are defined by:o Name

o Arity● Types of functions

o Anonymous & Inline Anonymous inherits scope

o Named does not inherit scope

Pattern Matching

● Assert, not assign● Equals sign isn’t really assignment, its

more like an assertion● Behaviour of tuples, lists and variables

in pattern matching is important to understand

● Ignore values using _● Force use variables using ^

Pipeline operator |>

● Formulating transformation of data● Similar to Linux pipes● Making functions/methods composable● Data |> Method 1 |> Method 2 |>

Method 3

Live Examples

● Sum, Multiply● Factorial, Fibonacci, GCD● List operations● File operations● Maps, Typed maps

Tooling

● Mix, a wonderful build system● First class documentation

o Inline documentationo Doctests

● Dependency Management using Mix● Testing library included

Topics not covered

● Mix, `maven` for Elixiro compatible with hex, the `maven` for Erlang

● OTP● Metaprogramming● Protocols● Structs● Streams, Enumerables, Collectables

Elixir frameworks

● Phoenix: Web framework● Ecto: LINQ for Elixir

More: Awesome Elixir List

Questions?

Interested? You can read more here: https://github.com/hashd/LearnStack/blob/master/notes/elixir.md

Recommended