i

Elm - Architektur

Seiteneffekte

Elm ist eine rein funktionale Sprache. Das bedeutet, dass Funktionen keine Seiteneffekte haben, also nichts außerhalb der Funktion verändern. Es dürfen keine Dateien geschrieben werden oder Daten ins Netzwerk gesendet werden. Außerdem müssen Funktionen immer das gleiche Ergebnis liefern, wenn sie mit den gleichen Parametern aufgerufen werden. Streng genommen darf eine Funktion also nicht einmal eine Ausgabe auf dem Bildschirm erzeugen.

Ein Programm, das bei der Ausführung keine Ausgabe erzeugen darf und keine Daten speichern kann, ist im Normalfall natürlich nicht besonders nützlich. Die Frage, die sich also stellt, ist: Wie können Elm-Programme trotzdem mit der Außenwelt interagieren?

The Elm Architecture - TEA

Elm löst dieses Problem mit der sogenannten Elm Architecture. In englischsprachigen Texten wird sie oft mit TEA abgekürzt. Die Grundidee dabei ist, dass das eigentliche Elm-Programm rein funktional bleibt, während alle Seiteneffekte von der Elm-Laufzeit-Umgebung (engl.: Runtime), die beim Übersetzen des Elm-Programms in JavaScript erzeugt wird, übernommen werden. Die folgende Grafik verdeutlicht das Konzept:

Gruppieren
  1. Das initiale Datenmodell wird an die Laufzeit-Umgebung gegeben.
  2. Die view-Funktion wird mit dem Datenmodell aufgerufen...
  3. ... und berechnet daraus die Html-Darstellung.
  4. Die Laufzeit-Umgebung stellt die Webseite dar.
  5. Der Benutzer interagiert mit der Seite z.B. durch Klick auf den Button zum Erhöhen des Schlüssels.
  6. Die update-Funktion wird mit der Nachricht Erhoehen und dem aktuellen Datenmodell aufgerufen...
  7. ... und berechnet daraus das neue Datenmodell, womit der Kreislauf von vorne beginnt.

Klicke auf die einzelnen Schritte zur Veranschaulichung.

Exkurs: Laufzeit-Umgebung - Runtime Environment

Laufzeit-Umgebungen gibt es auch in anderen Programmiersprachen, z.B. in Java. Dort wird die Laufzeit-Umgebung JVM (Java Virtual Machine) genannt. Während die JVM für Java einmal auf einem Rechner installiert wird und dann alle Java-Programme ausführen kann, wird die Laufzeit-Umgebung für Elm bei jedem Übersetzen eines Elm-Programms in JavaScript erzeugt. Jedes Elm-Programm hat also seine eigene Laufzeit-Umgebung. Da nur die Funktionen und Daten, die für das jeweilige Programm benötigt werden, in die Laufzeit-Umgebung eingebunden werden, ist sie sehr klein und effizient. Das ist besonders wichtig, da Elm-Programme im Normalfall in Webseiten eingebettet werden und die Laufzeit-Umgebung nicht unnötig viel Speicher verbrauchen darf.

Die Laufzeit-Umgebung für Elm wird zusammen mit dem übersetzten Elm-Programm als einzelne Datei in die Webseite eingebunden. Für einfache Programme ist diese Datei nur einige Kilobyte groß. Die JVM für Java hingegen ist einige Megabyte groß.

Suche

v
8.2.3.5.1
dev.inf-schule.de/deklarativ/fp_elm/dynamischewebseiten/caesardynamisch/tea
dev.inf-schule.de/8.2.3.5.1
dev.inf-schule.de/@/page/UUA1kxTU3FokyYNd

Rückmeldung geben