EMZETT.
Login

Kurz: - snake_case für Funktionen/Variablen, CamelCase für Module, Atome klein - Funktionen mit ? liefern Boolean (empty?), mit ! können Exceptions werfen - mix format formatiert.

Teil des Kurses Elixir

Kapitel 8 von 8 im Kurs Elixir (Abschnitt „Nachschlagen“). Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Syntax im Überblick

x = 1                         Zuweisung/Match        ^x   Pin
{a, b} = {1, 2}               Tupel                  [h | t] = [1, 2, 3]
%{k: v} = map                 Map-Match              %Struct{f: v}
fn x -> x end                 anonyme Funktion       &(&1 + 1)   Capture
def f(x) when x > 0, do: …    Funktion mit Guard     defp   privat
x |> f() |> g(1)              Pipe
case v do pattern -> … end    if/unless/cond/with
for x <- l, cond, do: …       Comprehension

Wichtige Module

ModulZweckBeispiele
EnumCollections (sofort)map filter reduce sort_by group_by frequencies
StreamCollections (lazy)iterate unfold cycle take_while
StringTextsplit trim upcase replace contains? slice
ListListenfirst last delete insert_at flatten
Map / KeywordMaps / Keyword-Listenget put merge update fetch
Integer / FloatZahlenparse to_string pow round
File / PathDateienread write exists? ls join
IOEin-/Ausgabeputs inspect gets
Process / Task / Agent / GenServerNebenläufigkeitspawn send receive async await
KernelGrundfunktionenlength hd tl elem is_integer max min
DateTime / Date / TimeZeitutc_now new! diff add
Regexreguläre Ausdrücke~r/…/, run scan replace
d = ~D[2025-03-15]
IO.inspect(Date.add(d, 20))
IO.inspect(Date.day_of_week(d))
IO.inspect(Date.diff(~D[2025-12-24], d))
IO.inspect(DateTime.to_iso8601(~U[2025-03-15 14:30:00Z]))
IO.inspect(Regex.scan(~r/\d+/, "a1b22c333"))
IO.inspect(Regex.replace(~r/(\w+)@(\w+)/, "mia@example", "\\2 at \\1"))
IO.inspect("2025-03-15" =~ ~r/^\d{4}-\d{2}-\d{2}$/)
IO.inspect(Path.join("a", "b.txt") |> Path.extname())

Ausgabe:

~D[2025-04-04]
6
284
"2025-03-15T14:30:00Z"
[["1"], ["22"], ["333"]]
"example at mia"
true
".txt"

Häufige Fehler

Meldung / ProblemUrsache
(MatchError) no match of right hand side valueMuster passt nicht zum Wert
(FunctionClauseError) no function clause matchingkeine Klausel passt: Fall ergänzen
(UndefinedFunctionError)Funktion/Modul nicht vorhanden oder falsche Stelligkeit
(ArgumentError)falsche Argumente (z. B. String.to_integer("x"))
(KeyError) key :x not foundMap/Struct hat den Schlüssel nicht: Map.get, m[:x]
(CompileError) undefined function x/0Variable nicht definiert oder Tippfehler
Listen mit ++ an der falschen Stelle`[x
Variable “ändert” sich nichtDaten sind unveränderlich; Ergebnis neu binden
Prozess hängt in receivekeine Nachricht kommt: after-Timeout setzen

Konventionen

  • snake_case für Funktionen/Variablen, CamelCase für Module, Atome klein
  • Funktionen mit ? liefern Boolean (empty?), mit ! können Exceptions werfen
  • mix format formatiert; Credo (Stil) und Dialyzer (Typen) prüfen
  • Dokumentieren mit @moduledoc/@doc/@spec, testen mit ExUnit und Doctests

Weiterlernen

  • Offizielle Anleitung hexdocs.pm/elixir (“Getting Started”), Exercism (Elixir-Track)
  • Bücher: Programming Elixir, Elixir in Action, Designing Elixir Systems with OTP
  • Phoenix-Guides (hexdocs.pm/phoenix), Elixir Forum, ElixirConf-Vorträge

Merke

  • Pattern Matching, Pipes und Unveränderlichkeit prägen jeden Elixir-Code
  • Prozesse und OTP machen Nebenläufigkeit und Fehlertoleranz zur Normalität
  • Mix, ExUnit und Hex bilden die Werkzeugkette, Phoenix das Web-Framework

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Mix, Tests und Phoenix

Alle Kapitel: Elixir im Überblick