Kurz: 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.
Teil des Kurses Elixir
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
hallo.exs
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("")Ausgabe:
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")Ausgabe:
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.
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
Übungsaufgabe
Gib mit IO.puts deinen Namen und das Ergebnis von 6 * 7 in einem Satz aus.
Quiz zur Selbstkontrolle
Auf welcher virtuellen Maschine läuft Elixir?
- BEAM (Erlang-VM) (richtig)
- JVM
- CLR
- V8
Was bedeutet Unveränderlichkeit?
- Funktionen geben neue Werte zurück statt alte zu ändern (richtig)
- Variablen heißen anders
- Programme laufen nur einmal
- Daten können nicht gelesen werden
Wie gibt man einen beliebigen Wert lesbar aus?
- IO.inspect (richtig)
- IO.print
- console.log
Weiter im Kurs
Weiter: Datentypen und Pattern Matching
Alle Kapitel: Elixir im Überblick