“Efficiency and performance
optimization will get more, not less,
important.”
Slide 9
Slide 9 text
“Applications will increasingly need
to be concurrent if they want to
fully exploit continuing exponential
CPU throughput gains.”
Slide 10
Slide 10 text
Por que isso afeta
nossa aplicação?
Slide 11
Slide 11 text
No content
Slide 12
Slide 12 text
Elixir criada
por José
Valim
Slide 13
Slide 13 text
Percebeu que as ferramentas
que existiam não eram boas
para concorrência
Slide 14
Slide 14 text
No content
Slide 15
Slide 15 text
Elixir roda em cima
da maquina virtual do
Erlang
Slide 16
Slide 16 text
Erlang é conhecido por rodar
aplicações com latência
baixa, distribuídas ou
tolerante a falhas
Slide 17
Slide 17 text
Escalabilidade
Tolerância
a falhas
Compatível
com Erlang
Hot Code
Swap
Linguagem
Dinâmica Metaprogramação
Polimorfismo
Concorrência
Slide 18
Slide 18 text
Diferentes
paradigmas
Slide 19
Slide 19 text
Paradigma
Funcional
Slide 20
Slide 20 text
–Introduction to Functional Programming - Richard Bird Philip Wadler
“Programming in a functional
language consists of building
definitions and using the computer
to evaluate expressions.”
Slide 21
Slide 21 text
Imutabilidade
Slide 22
Slide 22 text
Consistência de
dados
Slide 23
Slide 23 text
Concorrência
Capacidade de lidar com várias coisas ao mesmo tempo
defmodule LightBulb do
def switch(human, bulb) do
end
end
LightBulb.switch(bulb)
Slide 30
Slide 30 text
Pattern Matching
Slide 31
Slide 31 text
name = "Amanda"
Slide 32
Slide 32 text
Interactive Elixir (1.5.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> name = "Amanda"
"Amanda"
iex(2)> "Amanda" = name
"Amanda"
iex(3)> "Amanda S" = name
** (MatchError) no match of right hand side value: "Amanda"
Slide 33
Slide 33 text
defmodule LightBulb do
def switch(human = %Human{}, bulb = %Bulb{})
…
end
end
Slide 34
Slide 34 text
Function Arity
Slide 35
Slide 35 text
defmodule LightBulb do
def switch(human, bulb) do
...
end
def switch(_) do
IO.puts "Precisamos de um humano e de uma escada."
end
end
Slide 36
Slide 36 text
Guards
Slide 37
Slide 37 text
defmodule LightBulb do
def switch(human, bulb) when bulb.burned_out == true do
…
end
end
Slide 38
Slide 38 text
If and unless
Slide 39
Slide 39 text
defmodule LightBulb do
def switch(human, bulb) when bulb.burned_out == true do
ladder = Ladder.get_average_height()
if ladder.under do
…
end
end
end
Slide 40
Slide 40 text
Pipe Operator
Slide 41
Slide 41 text
new_bulb = Bulb.get_bulb()
lader = Ladder.get_average_height()
human = Human.climb(human, ladder)
human = Human.remove_bulb(human, bulb)
human = Human.put_bulb(human, new_bulb)
defmodule NaturalNums do
# Uma clausula para parar a recursão
def print(1), do: IO.puts(1)
def print(n) do
# Imprime o número"
IO.puts(n)
# Chama a si mesmo com um valor a menos
print(n - 1)
end
end