DEV Community

Diego Novais
Diego Novais

Posted on • Updated on

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

Mais uma vez eu me enganei...

Quando vi uma {"tupla"} achei que seria um hash como em ruby ou Object em Javascript, pensei 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

e 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. (Importante saber que: 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(tuple, value) # append/2 ([Aridade da função](https://dev.to/dnovais/aridade-de-uma-funcao-41mo))

# Remove um elemento de uma Tupla.
delete_at(tuple, index) # delete_at/2 (Aridade da função)

# Cria uma nova Tupla.
duplicate(data, size) # duplicate/2 (Aridade da função)

# Insere uma elemento em uma determinada posição da Tupla.
insert_at(tuple, index, value) # insert_at/3 (Aridade da função)

# Converte uma Tuplara para uma List.
to_list(tuple) # to_list/1 (Aridade da função)

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

Discussion (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 Author

Com toda certeza!
Quando temos o entendimento dos 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.