Elixir:
Virheiden käsittely
Kuinka:
Elixirissä käytämme usein mallin vastaavuutta ja case
-lauseketta eri lopputulosten, mukaan lukien virheet, käsittelyyn.
defmodule Example do
def divide(a, b) do
case b do
0 -> {:error, "Nollalla jakaminen ei ole mahdollista."}
_ -> {:ok, a / b}
end
end
end
# Onnistunut jako
{:ok, result} = Example.divide(10, 2)
IO.puts("10 / 2 on #{result}")
# Yritys jakaa nollalla
{:error, reason} = Example.divide(10, 0)
IO.puts("Virhe: #{reason}")
Esimerkkitulo:
10 / 2 on 5.0
Virhe: Nollalla jakaminen ei ole mahdollista.
Kun ajat tämän Elixir-koodin, saat joko onnistuneen jakotuloksen tai virheilmoituksen riippuen syötteestäsi. Ei kaatumisia täällä!
Syväsukellus
Aikaisemmin virheiden käsittely oli usein paluuarvojen tarkistamista. Elixirin funktionaalisten juurien ansiosta meillä on nyt mallin vastaavuus ja merkityt tuplat, kuten {:ok, value}
tai {:error, reason}
, jotka ovat elegantimpi ratkaisu.
Elixirissä on muitakin tapoja käsitellä virheitä:
- Elixirin
try
jarescue
, jotka muistuttavat imperatiivisten kielien perinteistätry-catch
-rakennetta, mutta joita käytetään harvemmin Elixirin eksplisiittisyyden suosimisen vuoksi. - Supervisorit ja GenServerit, osa Elixirin OTP-kehyksestä, jotka keskittyvät enemmän vikasietoisuuteen. Ne tarkkailevat koodisi prosessia, valmiina käynnistämään sen uudelleen, jos jotain menee vikaan.
Toteutuksen kannalta Elixir rakentuu Erlangin luotettavuuden varaan. Se käsittelee virheitä vain toisen tyyppisenä viestinä, joka käsitellään kaiken mallin vastaavuuden ja funktionaalisen hyvyyden avulla.
Katso Myös
Lisätietoa Elixirin virheenkäsittelystä, tutustu:
- Elixirin virallinen opas virheenkäsittelystä.
- Lisätietoa prosesseista ja OTP:stä.
- Elixir Forum on aina hyvä paikka kysyä kysymyksiä: https://elixirforum.com.