class Order
attr_reader :user, :products, :logger,
:mailer, :payment, :source #...
end
Slide 55
Slide 55 text
Elixir
Slide 56
Slide 56 text
defmodule MySet do
defstruct items: []
def push(set = %{items: items}, item) do
if Enum.member?(items, item) do
set
else
%{set | items: items ++ [item]}
end
end
end
capitalize_words("the dark tower")
# => "The Dark Tower"
Slide 62
Slide 62 text
def capitalize_words(title) do
join_with_whitespace(
capitalize_all(
String.split(title)
)
)
end
Slide 63
Slide 63 text
def capitalize_words(title) do
title
|> String.split
|> capitalize_all
|> join_with_whitespace
end
Slide 64
Slide 64 text
✅ Funções
⏹ Código declarativo
⏹ Imutabilidade
Slide 65
Slide 65 text
No content
Slide 66
Slide 66 text
Código imperativo
Foco no como
Slide 67
Slide 67 text
Javascript
Slide 68
Slide 68 text
function capitalizeAll(list) {
var newList = [];
for (var i = 0; i < list.length; i++) {
newList.push(capitalize(list[i]));
}
return newList;
}
function capitalize(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
Slide 69
Slide 69 text
var list = ["dogs", "hot dogs", "bananas"];
capitalizeAll(list);
// => ["Dogs", "Hot dogs", "Bananas"]
Slide 70
Slide 70 text
Código declarativo
Foco no o quê
Slide 71
Slide 71 text
Elixir
Slide 72
Slide 72 text
defmodule StringList do
def capitalize_all([]), do: []
def capitalize_all([first | rest]) do
[String.capitalize(first) | capitalize_all(rest)]
end
end
Account = Struct.new(:amount) do
def deposit(value)
new_amount = amount + value
sleep(1)
self.amount = new_amount
end
def withdraw(value)
new_amount = amount - value
sleep(1)
self.amount = new_amount
end
end