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 e rescue do Elixir, que se assemelham ao tradicional try-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: