Clojure ist ein moderner Lisp-Dialekt, der auf der Java Virtual Machine läuft und funktionale Programmierung mit unveränderlichen Datenstrukturen in den Mittelpunkt stellt. Er eignet sich für Webanwendungen, Datenverarbeitung und nebenläufige Systeme.
Erste Schritte
Clojure-Code wird in Dateien mit der Endung .clj gespeichert. Die REPL (Read-Eval-Print-Loop) ist der zentrale Arbeitsplatz — Code wird sofort ausgewertet.
clojure # REPL starten
clojure -M hallo.clj # Skript ausführen
lein repl # REPL über Leiningen (Build-Tool)
Basissyntax
Alles in Clojure ist ein Ausdruck in Klammern: (Funktion Argumente ...). Es gibt keine Zuweisungen im klassischen Sinne, sondern Werte und Bindungen.
(println "Hallo Welt") ; Ausgabe
(def name "Lübeck") ; globale Bindung
(let [x 10 y 20] (+ x y)) ; lokale Bindungen -> 30
(+ 1 2 3) ; 6 (Präfixnotation)
Unveränderliche Datenstrukturen
(def v [1 2 3]) ; Vektor
(conj v 4) ; [1 2 3 4] (neuer Vektor)
(def m {:name "Devon" :ort "Lübeck"})
(:name m) ; Devon
(get m :ort) ; Lübeck
Funktionen
(defn verdoppeln [n] (* n 2))
(verdoppeln 21) ; 42
(map inc [1 2 3]) ; (2 3 4)
(filter even? (range 10)) ; (0 2 4 6 8)
Nebenläufigkeit
Clojure bietet atom für geteilten, synchronisierten Zustand und future für parallele Berechnungen.
(def zaehler (atom 0))
(swap! zaehler inc) ; atomar erhöhen
@zaehler ; 1 (dereferenzieren)
(future (Thread/sleep 100) 42) ; parallele Berechnung
Praxis-Tipps
- Präfixnotation und Klammern wirken ungewohnt — nach kurzer Eingewöhnung ist die Syntax extrem konsistent.
- Unveränderliche Datenstrukturen erleichtern nebenläufige Programme enorm.
- Für Web-Entwicklung sind Ring (HTTP) und Compojure beliebte Bibliotheken.
Verwandte Grundlagen: Haskell-Befehle und Scala-Befehle.