EMZETT.
Login

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

Kapitel 1 von 8 im Kurs Elixir. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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 starten

Das 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 Zeilenumbruch
  • IO.puts gibt Text aus, IO.inspect zeigt 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
  • iex zum Ausprobieren, .exs-Skripte mit elixir
  • Alles ist ein Ausdruck, Daten sind unveränderlich
  • IO.puts und IO.inspect zur 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

Weiter im Kurs

Weiter: Datentypen und Pattern Matching

Alle Kapitel: Elixir im Überblick