Quando vi uma {"tupla"}
em Elixir pensei que seria um hash como em ruby ou Object em Javascript, pensei também que talvez seria apenas mais um nome para o hash | object, mas assim como list não é um array, uma Tupla não é um hash | object.
O que é uma Tupla (Tuple)?
Tupla é uma estrutura de dados que assim como a List permite tipos diferentes de dados, como no exemplo:
{:atom, "string", 1, 2.5}
As tuplas são armazenadas continuamente (uma seguida da outra) na memória (semelhante aos Arrays em outras linguagens).
É importante saber que...
Normalmente as tuplas são usadas em retorno de uma função, quando sucesso:
defmodule Example do
def say(name), do: {:ok, "Hey #{name}, I am here!"}
end
ou quando for um erro:
defmodule Example do
# ...
def say(nil), do: {:error, "The name can`t be blank!"}
end
- O acesso a qualquer elemento leva um tempo constante, mas a modificação de uma
tupla
, que produz uma cópia superficial, leva um tempo linear.- As funções Enum não funcionam em
tuplas
.Tuplas
não são uma coleção de elementos.- As funcões de módulo das tuplas raramente são usadas pois as
tuplas
são containers de tamanho fixo para vários elementos.- Ao manipular uma
tupla
usando suas funções de módulo faz com que astuplas
sejam usadas como coleções.
# Insere um elemento no final da Tupla.
# append/2 (Função de aridade 2)
append(tuple, value)
# Remove um elemento de uma Tupla.
# delete_at/2 (Função de aridade 2)
delete_at(tuple, index)
# Cria uma nova Tupla.
# duplicate/2 (Função de aridade 2)
duplicate(data, size)
# Insere uma elemento em uma determinada posição da Tupla.
# insert_at/3 (Função de aridade 3)
insert_at(tuple, index, value)
# Converte uma Tuplara para uma List.
# to_list/1 (Função de aridade 1)
to_list(tuple)
Obs.: Caso queira saber o que é Aridade de uma função eu escrevi um artigo sobre Aridade de uma função.
Para manipular uma coleção de elementos, use uma lista.
Conclusão sobre as Tuplas
Uma Tupla
é uma estrutura de dados que permite elementos de vários tipos assim como uma List.
São semelhante a um array, onde seus elementos são armazenados continuamente na memória.
Existem vários detalhes de implementação que precisamos entender para usá-las corretamente.
Contato:
Email: contato@diegonovais.com.br
LinkedIn: https://www.linkedin.com/in/diegonovais/
Github: https://github.com/dnovais
Top comments (2)
É sempre bom conhecer várias estruturas de dados para poder aplicar aquela que irá melhor ajudar a resolver o problema.
Com toda certeza!
Quando entendemos os fundamentos nosso dia a dia como desenvolvedor fica mais fácil.
E meu objetivo é exatamente esse, masterizar os fundamentos e compartilhar tudo que estou aprendendo, e assim quem sabe eu consiga ajudar outros desenvolvedores na comunidade.