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
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: … ComprehensionWichtige Module
| Modul | Zweck | Beispiele |
|---|---|---|
Enum | Collections (sofort) | map filter reduce sort_by group_by frequencies |
Stream | Collections (lazy) | iterate unfold cycle take_while |
String | Text | split trim upcase replace contains? slice |
List | Listen | first last delete insert_at flatten |
Map / Keyword | Maps / Keyword-Listen | get put merge update fetch |
Integer / Float | Zahlen | parse to_string pow round |
File / Path | Dateien | read write exists? ls join |
IO | Ein-/Ausgabe | puts inspect gets |
Process / Task / Agent / GenServer | Nebenläufigkeit | spawn send receive async await |
Kernel | Grundfunktionen | length hd tl elem is_integer max min |
DateTime / Date / Time | Zeit | utc_now new! diff add |
Regex | regulä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 / Problem | Ursache |
|---|---|
(MatchError) no match of right hand side value | Muster passt nicht zum Wert |
(FunctionClauseError) no function clause matching | keine 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 found | Map/Struct hat den Schlüssel nicht: Map.get, m[:x] |
(CompileError) undefined function x/0 | Variable nicht definiert oder Tippfehler |
Listen mit ++ an der falschen Stelle | `[x |
| Variable “ändert” sich nicht | Daten sind unveränderlich; Ergebnis neu binden |
Prozess hängt in receive | keine Nachricht kommt: after-Timeout setzen |
Konventionen
snake_casefür Funktionen/Variablen,CamelCasefür Module, Atome klein- Funktionen mit
?liefern Boolean (empty?), mit!können Exceptions werfen mix formatformatiert; 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
Welches Hex-Paketformat gibt Zugriff auf Pakete?
- hex.pm (richtig)
- npmjs.com
- pypi.org
- crates.io
Was liefert eine Funktion mit ? am Ende üblicherweise?
- Einen Boolean (richtig)
- Einen Fehler
- nil
- Eine Liste
Welche Datei wird mit mix test ausgeführt?
- Dateien in test/ mit Endung _test.exs (richtig)
- Alle .ex-Dateien
- mix.exs
- config.exs
Weiter im Kurs
Zurück: Mix, Tests und Phoenix
Alle Kapitel: Elixir im Überblick