$30 off During Our Annual Pro Sale. View Details »

what is this elixir thing everyone is talking about

what is this elixir thing everyone is talking about

some of my fav features of elixir

lightning talk for CodeDaze.io on September 16th, 2016

José Tomás Albornoz

September 16, 2016
Tweet

More Decks by José Tomás Albornoz

Other Decks in Programming

Transcript

  1. what is this elixir thing
    everyone's talking about
    by jojo

    View Slide

  2. what is elixir

    View Slide

  3. elixir is a functional language

    View Slide

  4. created by José Valim

    View Slide

  5. that runs on the erlang vm

    View Slide

  6. pattern matching
    iex(1)> [first, second] = [1, 2]
    [1, 2]
    iex(2)> first
    1

    View Slide

  7. pattern matching
    iex(2)> [first, second] = [1,2,3]
    ** (MatchError) no match of right hand side
    value: [1, 2, 3]

    View Slide

  8. pattern matching
    iex(1)> payload = %{username: "eljojo", stuff: true}
    %{stuff: true, username: "eljojo"}
    iex(2)> %{username: name} = payload
    %{stuff: true, username: "eljojo"}
    iex(3)> name
    "eljojo"

    View Slide

  9. function overloading
    def make_sound(:cow) do
    IO.puts "MOOOOOOOOO"
    end
    def make_sound(:cat) do
    IO.puts "MEEEOOWW"
    end
    def make_sound(_) do
    IO.puts "¯\_(ϑ)_/¯"
    end

    View Slide

  10. function overloading
    def make_sound(%{animal: :cow}) do
    IO.puts "MOOOOOOOOO"
    end
    def make_sound(%{animal: :cat}) do
    IO.puts "MEEEOOWW"
    end
    def make_sound(%{animal: name}) do
    IO.puts "not sure how to #{name} ¯\_(ϑ)_/¯"
    end

    View Slide

  11. we also got guards
    def page_ops(downtime) when downtime < 10 do
    IO.puts "¯\_(ϑ)_/¯"
    end
    def page_ops(downtime) when downtime >= 10 do
    PagerDuty.notify(whatever)
    end

    View Slide

  12. pipe operator
    def add_one(number), do: number + 1
    def multiply_by_three(number), do: number * 3
    multiply_by_three(add_one(1)) # => 6

    View Slide

  13. pipe operator
    def add_one(number), do: number + 1
    def multiply_by_three(number), do: number * 3
    1 |> add_one |> multiply_by_three # => 6

    View Slide

  14. processes + messages
    current_process = self()
    spawn_link(fn ->
    send(current_process, {:msg, "hello world"})
    end)
    receive do
    {:msg, contents} -> IO.puts contents
    end

    View Slide

  15. processes + messages
    # machine one
    receive do
    {:msg, contents} -> IO.puts contents
    end
    # machine two
    process_name = "$MACHINE_ONE"
    spawn_link(fn ->
    send(process_name, {:msg, "yo!"})
    end)

    View Slide

  16. what is phoenix

    View Slide

  17. A productive web framework that
    does not compromise speed and maintainability.

    View Slide

  18. it's basically rails for
    elixir, but cooler

    View Slide

  19. validations
    def changeset(struct, params \\ %{}) do
    struct
    |> cast(params, [:email_address, :first_name])
    |> validate_required([:email_address])
    end
    def changeset_after_signup(struct, params \\ %{}) do
    changeset(struct, params)
    |> validate_required([:first_name])
    end

    View Slide

  20. we're hiring!

    View Slide

  21. @eljojo

    View Slide