Ein Struct (defstruct) ist eine Map mit festen Feldern und eigenem Typnamen: %Person{name: "Mia"}. Behaviours und Protokolle beschreiben Verträge für Module und Datentypen. Fehler meldest du üblicherweise mit {:ok, wert} und {:error, grund}; mit with verkettest du mehrere solcher Schritte. Echte Ausnahmen gibt es (raise, try/rescue), aber das Motto lautet: Let it crash: Ein fehlerhafter Prozess darf abstürzen, ein Supervisor startet ihn neu.
defmodule Person do
defstruct name: "", alter: 0
end
p = %Person{name: "Mia", alter: 17}
IO.inspect(%{p | alter: 18})
defmodule Parser do
def zahl(text) do
case Integer.parse(text) do
{n, ""} -> {:ok, n}
_ -> {:error, :keine_zahl}
end
end
end
with {:ok, a} <- Parser.zahl("20"),
{:ok, b} <- Parser.zahl("22") do
IO.puts(a + b) # 42
else
{:error, grund} -> IO.puts("Fehler: #{grund}")
endMerke
defstructfür Daten mit festen Feldern{:ok, wert}und{:error, grund}als Konventionwithverkettet mehrere Schritte
Aufgabe
Schreibe eine Funktion, die zwei Texte in Zahlen umwandelt und die Summe oder einen Fehler liefert.