Elixir:
Feilhåndtering
Hvordan:
I Elixir bruker vi ofte mønstermatching og case
-setningen for å behandle ulike utfall, inkludert feil.
defmodule Eksempel do
def divider(a, b) do
case b do
0 -> {:error, "Kan ikke dele med null."}
_ -> {:ok, a / b}
end
end
end
# Vellykket divisjon
{:ok, resultat} = Eksempel.divider(10, 2)
IO.puts("10 / 2 er #{resultat}")
# Forsøk på å dele med null
{:error, årsak} = Eksempel.divider(10, 0)
IO.puts("Feil: #{årsak}")
Eksempel på utdata:
10 / 2 er 5.0
Feil: Kan ikke dele med null.
Når du kjører denne Elixir-koden, vil du enten få et vellykket divisjon eller en feilmelding, avhengig av inndataene dine. Ingen kræsj her!
Dypdykk
I gamle dager handlet feilhåndtering oftere om å sjekke returverdier. Med Elixirs funksjonelle røtter har vi imidlertid mønstermatching og merkede tupler, som {:ok, verdi}
eller {:error, årsak}
, som er mer elegante.
Det er andre måter å håndtere feil i Elixir:
- Elixirs
try
ogrescue
, som ligner på det tradisjonelletry-catch
i imperativt språk, men brukes sjeldnere på grunn av Elixirs preferanse for eksplisitthet. - Supervisorer og GenServers, en del av Elixirs OTP-rammeverk, som handler mer om feiltoleranse. De overvåker prosessen til koden din, klar til å starte den på nytt hvis ting går galt.
Når det gjelder implementering bygger Elixir på Erlangs robusthet. Det behandler feil som bare en annen type melding som skal håndteres med all mønstermatching og funksjonelle finesser.
Se også
For videre lesing om feilhåndtering i Elixir, sjekk ut:
- Elixirs offisielle guide om feilhåndtering.
- Lær mer om prosesser og OTP.
- Elixir Forum er alltid et godt sted å stille spørsmål: https://elixirforum.com.