Mapas
Map são estruturas de dados no modelo chave valor (dicionário) que aceitam todos os tipos de dados. A definição dela segue o modelo %{} e os valores vão dentro das chaves.
Vamos criar uma estrutura simples:
defmodule MapsTest do
use ExUnit.Case
test "maps" do
data = %{
name: "iago"
}
# utilizando pattern matching
%{name: my_name_1} = data
assert my_name == "iago"
# Utilizando fech
{:ok, my_name_2 } = Map.fetch(data, :name)
assert my_name_2 == "iago"
# Utilizando acesso por indice
my_name_3 = data[:name]
assert my_name_3 == "iago"
# utilizando encadeamento
my_name4 = data.name
assert my_name4 == "iago"
# Quando acessado por indice, o que acontece quando o elemento não existe
my_name_5 = data[:not_exists_index]
assert my_name_5 == nil
# Quando acessado por encademamento, o que acontece quando o elemento não existe
assert_raise KeyError, fn ->
data = %{name: "iago"}
data.nonexistent_element
end
end
endRodando esse código o test passará, mas dará um aviso que algo deu errado, no nosso caso, é a linha 26, que dispara um erro dizendo que não existe o elemento nonexistent_element.
A função assert_raise/2 lida com expectativas de exceção do código, podendo fazer parte do teste para garantirmos o comportamento correto.
Existem diversas formas de lidar com Map, bastante entender como fica melhor para você.
Alterar valores
Tendo uma vez o Map criado, podemos também alterar os valores.
Conclusão
Existem diversas outras funções de apoio ao Map, voce poderá ver elas acessando esse link. Vimos aqui formas de criar, alterar e acessar dados de um Map. Também falamos um pouco sobre imutabilidade, conceito importante em linguagens funcionais.
Last updated
Was this helpful?