DEV Community

Diego Novais
Diego Novais

Posted on • Edited on

{"O", "que", "é", 1, :tupla, "?"}

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}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

ou quando for um erro:

defmodule Example do
  # ...
  def say(nil), do: {:error, "The name can`t be blank!"}
end
Enter fullscreen mode Exit fullscreen mode
  • 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 as tuplas 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)

Enter fullscreen mode Exit fullscreen mode

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)

Collapse
 
eduardoklosowski profile image
Eduardo Klosowski

É sempre bom conhecer várias estruturas de dados para poder aplicar aquela que irá melhor ajudar a resolver o problema.

Collapse
 
dnovais profile image
Diego Novais • Edited

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.