# assignment
a = 1 # => 1
# matching
1 = a # => 1
2 = a # => ** (MatchError) ...
{ ^a, b } = { 1, 2 } # b => 2
[head | _] = [1, 2, 3] # head => 1
PATTERN.EX
Slide 14
Slide 14 text
case { 1, 2, 3 } do
{ 4, 5, 6 } ->
"This won't match"
{ 1, x, 3 } when x > 0 ->
"This will match and assign x"
_ ->
"No match"
end
GUARD.EX
Slide 15
Slide 15 text
Processes
Slide 16
Slide 16 text
current_pid = self
spawn fn ->
current_pid <- :hello
end
receive do
:hello ->
IO.puts "Hello World"
end
PROCESS.EX
Slide 17
Slide 17 text
defmodule Stacker.Supervisor do
use Supervisor.Behaviour
def start_link(stack) do
:supervisor.start_link(__MODULE__, stack)
end
def init(stack) do
children = [worker(Stacker.Server, [stack])]
supervise children, strategy: :one_for_one
end
end
SUPERVISOR.EX
Slide 18
Slide 18 text
Protocols
Macros
DocTest
and lots more
Slide 19
Slide 19 text
elixir-lang.org
#elixir-lang
Slide 20
Slide 20 text
No content
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
ecto
database query DSL
Slide 23
Slide 23 text
elixir-lang/ecto
@ericmj
Slide 24
Slide 24 text
defmodule User do
use Ecto.Model
queryable "user" do
field :name, :string
end
end
MODEL.EX
Slide 25
Slide 25 text
defmodule FindUser do
import Ecto.Query
def find_by_name(name) do
query = from u in User,
where: u.name == ^name,
limit: 1
Repo.all(query)
end
end
QUERY.EX
defmodule Repo do
use Ecto.Repo,
adapter: Ecto.Adapters.Postgres
def url do
"ecto://user:pass@localhost/db"
end
end
Repo.all(...)
Repo.create(...)
Repo.update(...)
Repo.delete(...)
REPO.EX
Slide 30
Slide 30 text
Entity
Slide 31
Slide 31 text
• fields
• associations
• elixir record
Slide 32
Slide 32 text
defmodule User do
use Ecto.Model
queryable "user" do
field :name, :string
field :password, :string,
default: "secret"
has_many :projects, Project
end
end
MODEL.EX