Tuplas
A tupla é uma estrutura de dados simples que aceita todos os tipos de dados. Diferente do map ela não aceita chave valor e sim, diretamente o valor. Iniciamos sua declaração com abrir chaves {
e finalizamos com fechar chaves }
. Seus valores são separados por virgula.
Exemplo :
Você verá muito pela comunidade elixir o padrão de utilização de tuplas para simbolizar sucesso de uma função, separando elas como {:ok, data}
e {:error, reason}
. Diversas bibliotecas utilizam esse mesmo padrão e é uma forma de aprender a lidar com os dados.
Ao lidar com tuplas, temos algumas funções para nos ajudar
Tuple.insert_at/2
- Inserir valor ao final da tupleelem/2
- Acessar a tupla por um indiceput_elem/3
- Substituir o valor de um elemento da tupla por um indicetuple_size/1
- obter número de elementos na tupla
Outro exemplo simples:
Tuplas também podem ter valores complexos como structures
ou maps
.
Utilização de tupla de :ok
e :error
em uma função
:ok
e :error
em uma funçãoConvenções
Temos uma seção convenções da linguagem que é bem importante o entendimento. Tupla :ok/:error é uma delas. Acesse aqui
Vamos supor que faremos uma operação de cadastro em um fornecedor. Após a operação precisamos informar se a operação foi bem sucedida ou não. Para facilitar chamarei esse modulo de Vendor
e a função de register
. No registro precisamos apenas de um ID e uam descrição. Então passaremos dois parâmetros para a função. Queremos como retorno, a utilização de tuplas com :ok
e :error
chamado de error_handling (ou, tratamento de erro).
Conseguimos extrair o result utilizando pattern matching
. O :ok
garante que so poderá ter um matching caso venha um :ok
no primeiro elemento da tupla.
Se rodarmos isso teremos os primeiros relatórios de erro
Precisamos criar nosso módulo com nossa função
O cenário feliz foi definido e tudo esta funcionando. Agora, precisamos também garantir o comportamento para a tupla com :error
. Para isso iremos garantir que so possa ser enviado por parâmetro IDs do tipo inteiro.
Se rodarmos isso veremos que ele gera um novo erro para nós
Isso significa que nao foi encontrado uma função que atenda as espectativas dessa chamada. Devido a precisar ser inteiro e estarmos enviando String o código quebra.
Para resolver esse problema, precisamos criar uma nova função de mesmo nome que atenda a nova especificação. No nosso caso, criaremos uma apenas para informar que algo esta errado e retornar o :error
.
Basta rodar e ver que agora temos o tratamento correto.
Tratamento de erro Esta não é a melhor forma de tratar erros. Aqui foi simplificado para facilitar a explicação e exemplificar a utilização de tuplas. Mais a frente falaremos sobre tratemento de erros. Veja mais sobre isso aqui
Conclusão
Tuplas são uma estrutura de dados simples onde guarda valores de todos os tipos. Vimos formas de utiliza-lo e algumas funções de apoio. Também demos uma olhada em um cenário comum que a tupla é utilizada.
Last updated