Slide 1

Slide 1 text

Arjan van der Gaag @avdgaag • arjanvandergaag.nl

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

– erlang.org Erlang is a programming language used to build massively scalable soft real-time systems with requirements on high availability. Erlang's runtime system has built-in support for concurrency, distribution and fault tolerance.

Slide 4

Slide 4 text

Anonymous functions iex> Enum.map [1, 2, 3], fn n -> n * 2 end [2, 4, 6] iex> Enum.map [1, 2, 3], &(&1 * 2) [2, 4, 6]

Slide 5

Slide 5 text

Named functions & modules defmodule Greeter do def greet(name) do IO.puts "Hello, #{name}" end end iex> Greeter.greet("James") "Hello, James" iex> Enum.each ["john", “paul”], &Greeter.greet/1 "Hello, john" "Hello, paul"

Slide 6

Slide 6 text

defmodule MyMap do ! ! ! ! ! end Pattern matching ! def map([], _), do: [] ! ! ! def map([head | tail], fun) do [fun.(head) | map(tail, fun)] end

Slide 7

Slide 7 text

Pipelines iex> String.last(String.upcase("foo")) "O" iex> "foo" ...> |> String.upcase ...> |> String.last "O"

Slide 8

Slide 8 text

Assert defmodule TruthTest do use ExUnit.Case test "considers two strings equal" do assert "foo" == "bar" end end ! ! ! ! ! ! ! ! 1) test considers two strings equal (TruthTest) ** (ExUnit.ExpectationError) expected: "foo" to be equal to (==): "bar" at test/demo/truth_test.exs:5

Slide 9

Slide 9 text

Macros for
 Metaprogramming
 Mayhem

Slide 10

Slide 10 text

Actors fib = spawn(Fibonacci, :server, [self]) fib <- { :number, 17 } ! ! ! receive do ! ! ! ! ! ! end ! ! ! ! { :ok, result } -> IO.puts "Received response:" IO.puts result ! ! ! ! ! ! ! { _, error } -> IO.puts “An error occured!” IO.puts error

Slide 11

Slide 11 text

encapsulated
 state message message

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Re-learn programming

Slide 14

Slide 14 text

Practice makes perfect

Slide 15

Slide 15 text

Pure functions and immutable data are easy to test.

Slide 16

Slide 16 text

FP OOP

Slide 17

Slide 17 text

♥ docs

Slide 18

Slide 18 text

Macros allow awesome metaprogramming

Slide 19

Slide 19 text

Find out more • elixir-lang.org • erlang.org • Programming Elixir (Dave Thomas) • Meet Elixir (Peepcode play-by-play with José Valim) • exercism.io • Gary Bernhardt: Boundaries