Elixir:
Tratamento de erros
Como fazer:
No Elixir, frequentemente usamos correspondência de padrões e a declaração case
para lidar com diferentes resultados, incluindo erros.
defmodule Example do
def divide(a, b) do
case b do
0 -> {:error, "Não é possível dividir por zero."}
_ -> {:ok, a / b}
end
end
end
# Divisão bem-sucedida
{:ok, resultado} = Example.divide(10, 2)
IO.puts("10 / 2 é #{resultado}")
# Tentativa de dividir por zero
{:error, motivo} = Example.divide(10, 0)
IO.puts("Erro: #{motivo}")
Saída de exemplo:
10 / 2 é 5.0
Erro: Não é possível dividir por zero.
Quando você executa esse código Elixir, você terá um resultado de divisão bem-sucedido ou uma mensagem de erro, dependendo da sua entrada. Nada de falhas aqui!
Aprofundamento
Há tempos atrás, o tratamento de erros era frequentemente sobre a verificação de valores de retorno. No entanto, com as raízes funcionais do Elixir, temos a correspondência de padrões e tuplas nomeadas, como {:ok, value}
ou {:error, reason}
, que são mais elegantes.
Há outras maneiras de tratar erros no Elixir:
- O
try
erescue
do Elixir, que se assemelham ao tradicionaltry-catch
das linguagens imperativas, mas são usados menos frequentemente devido à preferência do Elixir pela explicitação. - Supervisores e GenServers, que fazem parte do framework OTP do Elixir e tratam mais da tolerância a falhas. Eles monitoram o processo do código, prontos para reiniciá-lo se algo der errado.
Em termos de implementação, o Elixir se baseia na robustez do Erlang. Ele trata os erros como apenas outro tipo de mensagem a ser tratada com toda a correspondência de padrões e a bondade funcional.
Veja Também
Para leitura adicional sobre tratamento de erros no Elixir, confira:
- O guia oficial do Elixir sobre tratamento de erros.
- Saiba mais sobre processos e OTP.
- O Fórum Elixir é sempre um bom lugar para fazer perguntas: https://elixirforum.com.