Fork me on GitHub

Grundlagen

Zum Anfang: Grundlegende Datentypen und Operationen.

Inhaltsverzeichnis

Grundlagen

Elixir installieren

Installationsanleitungen für jedes Betriebssystem können auf elixir-lang.org unter Installing Elixir gefunden werden.

Nachdem Elixir installiert ist, kann die installierte Version einfach überprüft werden.

% elixir -v
Erlang/OTP 20 [erts-8.0.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir 1.3.4

Benutzen des interaktiven Modus

Elixir kommt mit iex, einer interaktiven Shell, welche uns erlaubt Ausdrücke in Elixir auszuwerten.

Zum Loslegen starten wir iex:

Erlang/OTP 20 [erts-8.0.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Interactive Elixir (1.3.4) - press Ctrl+C to exit (type h() ENTER for help)
iex>

Lass uns fortfahren und ein paar einfache Audrücke ausprobieren:

iex> 2+3
5
iex> 2+3 == 5
true
iex> String.length("Franz jagt im komplett verwahrlosten Taxi quer durch Bayern")
59

Falls du momentan noch nicht jeden Ausdruck versteht, mach dir darüber keine Gedanken. Wir denken du wirst bald ein Bild davon bekommen.

Einfache Datentypen

Integer

iex> 255
255

Unterstützung für Binär-, Oktal- und Hexadezimalzahlen wird mitgeliefert:

iex> 0b0110
6
iex> 0o644
420
iex> 0x1F
31

Gleitkommazahlen

In Elixir verlangen Gleitkommazahlen mindestens einen Punkt nach einer Zahl; sie haben 64 Bit double precision und überstützen e für Exponenten:

iex> 3.14
3.14
iex> .14
** (SyntaxError) iex:2: syntax error before: '.'
iex> 1.0e-10
1.0e-10

Booleans

Elixir unterstützt true und false als Booleans; alles außer false und nil wird als wahr betrachtet:

iex> true
true
iex> false
false

Atoms

Ein Atom ist eine Kontante, bei der der Name auch den Wert darstellt. Falls du mit Ruby vertraut vertraut bist kennst du Atoms als Symbole:

iex> :foo
:foo
iex> :foo == :bar
false

Booleans true und false sind gleichwertig zu den Atoms :true und :false.

iex> true |> is_atom
true
iex> :true |> is_boolean
true
iex> :true === true
true

Modulnamen in Elixir sind auch Atoms. MyApp.MyModule ist ein gültiges Atom, auch wenn dieses Modul noch nicht deklariert wurde.

iex> is_atom(MyApp.MyModule)
true

Atoms werden auch dazu genutzt, um Module aus Erlangbibiliotheken zu referenzieren. Dies gilt auch für in Erlang bereits vorhandenen Bibiliotheken.

iex> :crypto.rand_bytes 3
<<23, 104, 108>>

Strings

Strings in Elixir sind UTF-8 codiert und in doppelten Anführungszeichen zu schreiben:

iex> "Hello"
"Hello"
iex> "dziękuję"
"dziękuję"

Strings unterstützen Zeilenumbrüche und Escapesequenzen:

iex> "foo
...> bar"
"foo\nbar"
iex> "foo\nbar"
"foo\nbar"

Elixir unterstützt auch komplexere Datentypen. Wir werden mehr darüber erfahren wenn wir Collections und Funktionen lernen.

Einfache Operationen

Arithmetik

Elixir unterstützt die grundlegenden Operatoren +, -, *, und /. Wichtig dabei ist zu beachten, dass / immer Float zurück gibt:

iex> 2 + 2
4
iex> 2 - 1
1
iex> 2 * 5
10
iex> 10 / 5
2.0

Falls du Integerdivision oder den Rest der Division brauchst hat Elixir zwei hilfreiche Funktionen dafür:

iex> div(10, 5)
2
iex> rem(10, 3)
1

Boolean

Elixir bringt ||, && und ! an Booleschen Operatoren. Diese unterstützen jeden Typ:

iex> -20 || true
-20
iex> false || 42
42

iex> 42 && true
true
iex> 42 && nil
nil

iex> !42
false
iex> !false
true

Es gibt drei weitere Operatoren, deren erstes Argument ein Boolean sein muss:

iex> true and 42
42
iex> false or true
true
iex> not false
true
iex> 42 and true
** (ArgumentError) argument error: 42
iex> not 42
** (ArgumentError) argument error

Vergleiche

Elixir kommt mit diversen vergleichenden Operatoren: ==, !=, ===, !==, <=, >=, < und >.

iex> 1 > 2
false
iex> 1 != 2
true
iex> 2 == 2
true
iex> 2 <= 3
true

Für strikte Vergleiche von Integern und Floats benutze ===:

iex> 2 == 2.0
true
iex> 2 === 2.0
false

Ein wichtiges Feature von Elixir ist, dass jegliche zwei Typen miteinander verglichen werden können. Das ist beispielsweise dann praktisch, wenn man die Typen sortieren möchte. Wir müssen uns nicht an die Sortierreihenfolge erinnern, aber es ist wichtig zu wissen, dass es sie gibt:

number < atom < reference < functions < port < pid < tuple < maps < list < bitstring

Das führt mitunter zu interessanten, aber gültigen, Vergleichen, welche es so in anderen Sprachen nicht gibt:

iex> :hello > 999
true
iex> {:hello, :world} > [1, 2, 3]
false

String Interpolation

Falls du Ruby kennst wird dir String Interpolation in Elixir bekannt vorkommen:

iex> name = "Sean"
iex> "Hello #{name}"
"Hello Sean"

String-Verkettung

String-Verkettung benutzt den <> Operator:

iex> name = "Sean"
iex> "Hello " <> name
"Hello Sean"

Share This Page