Was ist Elixir?
Elixir (José Valim, 2012) ist eine funktionale, nebenläufige Sprache auf der Erlang-VM (BEAM). Die BEAM stammt aus der Telekommunikation (Ericsson) und ist auf Systeme ausgelegt, die nie ausfallen sollen: Millionen leichtgewichtiger Prozesse, Fehlertoleranz durch Supervisoren ("let it crash"), Hot-Code-Reloading, Verteilung über mehrere Rechner. WhatsApp, Discord und Pinterest nutzen die BEAM.
Mit Phoenix (Web-Framework mit LiveView für Echtzeit-UIs), Nerves (Embedded) und Livebook (interaktive Notebooks) bietet Elixir ein modernes Ökosystem. Die Syntax erinnert an Ruby, das Denken an funktionale Sprachen.
Ausführen
iex # interaktive Shell (beenden mit Strg+C zweimal)
elixir hallo.exs # Skript ausführen
mix new projekt # neues Projekt
mix run # Projekt startenDas erste Programm
IO.puts("Hallo Elixir!")
name = "Mia"
IO.puts("Hallo, #{name}!")
IO.inspect([1, 2, 3])
IO.inspect(%{a: 1, b: "zwei"})
IO.puts(2 + 3)
IO.write("ohne Zeilenumbruch")
IO.puts("")Hallo Elixir!
Hallo, Mia!
[1, 2, 3]
%{a: 1, b: "zwei"}
5
ohne ZeilenumbruchIO.putsgibt Text aus,IO.inspectzeigt jeden Wert (und gibt ihn zurück)#{...}fügt Ausdrücke in Strings ein- Kommentare:
# bis Zeilenende - Klammern bei Funktionsaufrufen sind optional (
IO.puts "Hi"), aber üblich
Alles ist ein Ausdruck, alles ist unveränderlich
x = 5
x = x + 1 # neue Bindung, nicht Änderung
IO.puts(x)
liste = [1, 2, 3]
neu = [0 | liste] # neue Liste, die alte bleibt
IO.inspect(liste)
IO.inspect(neu)
ergebnis = if x > 5, do: "groß", else: "klein"
IO.puts(ergebnis)
IO.inspect(1 + 2 * 3)
IO.inspect(10 / 4) # / liefert immer Float
IO.inspect(div(10, 4))
IO.inspect(rem(10, 4))
IO.inspect(Integer.pow(2, 10))
IO.inspect(true and false)
IO.inspect(nil || "Standard")6 [1, 2, 3] [0, 1, 2, 3] groß 7 2.5 2 2 1024 false "Standard"
Daten sind unveränderlich (immutable): Funktionen geben neue Werte zurück. Das macht nebenläufigen Code sicher, weil nichts gleichzeitig verändert wird.
So führst du den Code aus: Interaktiv mit iex, ein Skript hallo.exs mit elixir hallo.exs, Projekte mit mix new demo und mix run.
Merke
- Elixir läuft auf der BEAM: leichtgewichtige Prozesse, Fehlertoleranz, Verteilung
iexzum Ausprobieren,.exs-Skripte mitelixir- Alles ist ein Ausdruck, Daten sind unveränderlich
IO.putsundIO.inspectzur Ausgabe,#{}in Strings- Phoenix und LiveView für Webanwendungen
Aufgabe
Gib mit IO.puts deinen Namen und das Ergebnis von 6 * 7 in einem Satz aus.