Elixir & Phoenix

Andrew Schutt

Functional Programming

Functional Programming

"programming paradigm treats computation as the evaluation of functions"

Functional Programming
Functional Programming

Immutable Values

  • Variables can't be changed
Functional Programming

First Class Functions 

  • Functions can be...
    • variables
    • arguments
    • returned values
    • anonymous
Functional Programming

Pure Functions

  • same input = same output
Functional Programming

Recursion

  • Recursion
    • Recursion
      • Recursion
        • Recursion
          • Recursion!

Elixir

About Elixir

  • Erlang
  • Elixir History

Erlang

About Elixir
-module(hello_module).
-export([some_fun/0, some_fun/1]).

% A "Hello world" function
some_fun() ->
  io:format('~s~n', ['Hello world!']).

% This one works only with lists
some_fun(List) when is_list(List) ->
  io:format('~s~n', List).

% Non-exported functions are private
priv() ->
  secret_info.

Erlang

About Elixir
defmodule HelloModule do
  # A "Hello world" function
  def some_fun do
    IO.puts "Hello world!"
  end

  # This one works only with lists
  def some_fun(list) when is_list(list) do
    IO.inspect list
  end

  # A private function
  defp priv do
    :secret_info
  end
end

Erlang

About Elixir
defmodule HelloModule do
  # A "Hello world" function
  def some_fun do
    IO.puts "Hello world!"
  end

  # This one works only with lists
  def some_fun(list) when is_list(list) do
    IO.inspect list
  end

  # A private function
  defp priv do
    :secret_info
  end
end

-module(hello_module).
-export([some_fun/0, some_fun/1]).

% A "Hello world" function
some_fun() ->
  io:format('~s~n', ['Hello world!']).

% This one works only with lists
some_fun(List) when is_list(List) ->
  io:format('~s~n', List).

% Non-exported functions are private
priv() ->
  secret_info.

Erlang

About Elixir

Erlang Origins

About Elixir
  • Created in 1986
  • Authored by Joe Armstrong
  • BEAM = Erlang VM

Erlang Traits

About Elixir
  • Performant
  • 99.9999999% uptime
  • Fault tolerant
  • Concurrency
  • Hot swappable

Erlang OTP

About Elixir
  • Open Telecom Protocol (OTP)
  • OTP and Erlang

Elixir History

About Elixir
  • Created in 2011
  • Authored by Jose Valim

Nerves

https://github.com/nerves-project

Nerves

  • Platform
  • Framework
  • Tooling

Lumen

https://github.com/lumen

Phoenix Framework

Phoenix Framework

  • Created in 2014
  • Authored by Chris McCord

Phoenix New

Very simple to get a new Phoenix project up and going similar to Rails

 

 

 

Running the above commands generates a simple Twitter clone.

 

 

mix phoenix.new example_app
mix ecto.create
mix phoenix.gen.html Comment comments body:string username:string
mix ecto.migrate
Phoenix Framework

LiveView

Phoenix Framework

LiveView

Phoenix Framework

Phoenix & OTP

Phoenix Framework

Phoenix & OTP

Phoenix Framework

Phoenix & OTP

Phoenix Framework

Phoenix & OTP

Phoenix Framework

Phoenix & OTP

Phoenix Framework

Thanks!

Made with Slides.com