Elm – Funktionale Webentwicklung ohne Laufzeitfehler
Elm ist eine rein funktionale Sprache, die zu JavaScript kompiliert und speziell für zuverlässige Web-Oberflächen entwickelt wurde. Ihr Markenzeichen: Der Compiler fängt fast alle Fehler bereits zur Übersetzungszeit ab – zur Laufzeit treten praktisch keine Ausnahmen mehr auf. Elm eignet sich hervorragend, um JavaScript-Frontends durch eine wartbare, typsichere Alternative zu ersetzen.
Die wichtigsten Elm-Befehle und Werkzeuge
elm init– legt ein neues Projekt mitelm.jsonundsrc/an.elm reactor– startet einen lokalen Entwicklungsserver mit Live-Neuladen (Standard:http://localhost:8000).elm make src/Main.elm --output=main.js– kompiliert ein Modul zu JavaScript; mit--optimizefür den Produktions-Build.elm repl– interaktive Konsole zum Experimentieren mit Ausdrücken und Typen.elm install elm/http– installiert ein Paket aus dem offiziellen Elm-Paketkatalog.elm bump– berechnet die nächste Versionsnummer nach semantischer Versionierung.elm review– statische Analyse mit Regeln (ähnlich einem Linter).elm-test– führt Unit- und Fuzz-Tests aus (eigene CLI).
Grundkonzepte
- Model-Update-View: Jede Elm-App besteht aus einem Zustandsmodell, einer
update- und einerview-Funktion – der Elm Architecture folgend. - Unveränderliche Daten: Werte können nicht verändert, nur neu erzeugt werden. Das macht Nebenläufigkeit und Debugging einfacher.
- Typsystem: Jeder Wert hat einen festen Typ;
MaybeundResultersetzennullund Exceptions.
Beispiel: Counter
module Main exposing (main)
import Browser
import Html exposing (button, div, text)
import Html.Events exposing (onClick)
type Msg = Inkrement | Dekrement
update msg model =
case msg of
Inkrement -> model + 1
Dekrement -> model - 1
view model =
div []
[ button [ onClick Dekrement ] [ text "-" ]
, text (String.fromInt model)
, button [ onClick Inkrement ] [ text "+" ]
]
main = Browser.sandbox { init = 0, update = update, view = view }
Wann Elm sinnvoll ist
Elm glänzt bei mittelgroßen, langfristig gepflegten Frontends: Formularen, Dashboards und interaktiven Visualisierungen. Für sehr große Teams ist das Ökosystem kleiner als das von TypeScript, dafür bietet Elm durch sein Modell mehr Sicherheit.
Weiterführend: Haskell – die Mutter der rein funktionalen Sprachen und der Glossar-Eintrag Kompilieren.