DEV Community

Diego Novais
Diego Novais

Posted on • Edited on

5

{"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

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more

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.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more