- Mapas
- Listas de palavras-chave
- Tipos de Dados
-
Você pode definir um mapa com
%{e terminando com}. -
Os pares
chave => valorsão separados por vírgulas. -
Se todas as chaves forem átomos, você pode escrever como abaixo (observe a posição do
:).
# map = %{:a => 1, :b => 2}
map = %{a: 1, b: 2}map[:a]map2 = %{map | a: 3}mapmap2map2[:a]Exemplo de Struct Pessoa.
defmodule Pessoa do
defstruct nome: "Emília", idade: 55
endnome: "Emília", idade: 55 é uma lista de palavras-chave (keyword list).
%Pessoa{}%Pessoa{nome: "João"}%Pessoa{peso: 100}joao = %Pessoa{nome: "João"}joao.nomemaria = %{joao | nome: "Maria"}maria = %{joao | peso: 55}%Pessoa{nome: nome_de_joao} = joaonome_de_joaois_map(joao)joao.__struct__joao = %Pessoa{}joao[:nome]Enum.each(joao, fn {_field, value} -> IO.puts(value) end)No entanto, como as structs são apenas mapas, elas funcionam com as funções do módulo Map.
jane = Map.put(%Pessoa{}, :nome, "Jane")Map.merge(jane, %Pessoa{nome: "John"})Map.keys(jane)Se você não especificar um valor para uma chave, o valor nil será atribuído.
defmodule Produto do
defstruct [:nome]
end%Produto{}defmodule Usuario do
defstruct [:email, nome: "João", idade: 27]
end%Usuario{}defmodule Usuario do
defstruct [nome: "João", idade: 27, :email]
enddefmodule Car do
@enforce_keys [:make]
defstruct [:model, :make]
end%Car{}%Car{make: "Gurgel"}%Car{make: "Gurgel", model: "BR-800"}Bruce Tate diz que basicamente existem 3 tipos de função:
- construtoras
- redutoras
- conversoras
defmodule JogoDaVelha do
defstruct [:tabuleiro, :jogadores, :jogador_da_vez, :vencedor]
def new(jogador1, jogador2) do
%__MODULE__{
tabuleiro: ["", "", "", "", "", "", "", "", ""],
jogadores: [jogador1, jogador2],
jogador_da_vez: jogador1
}
end
def joga(jogo, simbolo, x, y) do
novo_tabuleiro = List.insert_at(jogo.tabuleiro, x - 1 + (y - 1) * 3, simbolo)
[novo_jogador_da_vez] = jogo.jogadores -- [jogo.jogador_da_vez]
%__MODULE__{jogo | tabuleiro: novo_tabuleiro, jogador_da_vez: novo_jogador_da_vez}
end
def jogador_da_vez(jogo) do
jogo.jogador_da_vez
end
endum_jogo = JogoDaVelha.new("Maria", "João")JogoDaVelha.joga(um_jogo, "X", 1, 1)JogoDaVelha.jogador_da_vez(um_jogo)JogoDaVelha.joga(um_jogo, "O", 2, 2)um_jogo = JogoDaVelha.joga(um_jogo, "X", 1, 1)um_jogo = JogoDaVelha.joga(um_jogo, "O", 2, 2)JogoDaVelha.new("Pedro", "Paula")
|> JogoDaVelha.joga("X", 1, 1)
|> JogoDaVelha.joga("o", 2, 1)
|> JogoDaVelha.joga("X", 1, 2)
|> JogoDaVelha.joga("o", 2, 3)JogoDaVelha.new("Pedro", "Paula")
|> JogoDaVelha.joga("X", 1, 1)
|> JogoDaVelha.joga("o", 2, 1)
|> JogoDaVelha.joga("X", 1, 2)
|> JogoDaVelha.joga("o", 2, 3)
|> JogoDaVelha.jogador_da_vez()