Clojure Tutorial, Teil 1
Von Carsten
Dies ist der erste Artikel in einer kleinen Serie, die meine ersten Schritte in der neuen funktionalen Programmiersprache Clojure dokumentieren soll. Die Artikel werden in unregelmäßigen Abständen hier publiziert.
Ich beschäftige mich im Moment mit Clojure, einer relativ neuen funktionalen Programmiersprache. Dabei will ich vor allem von meinem bisherigen Fokus der objekt-orientierten Programmierung (OOP) abrücken, um mal wieder ein wenig frischen Wind zu schnuppern. Golang war nicht ganz das richtige, da ich dort auch auf objekt-orientierte Weise entwickelt habe.
Funktionale Programmierung
Im Gegensatz zu der Daten- und Verhaltenssicht der OOP steht bei der funktionalen Programmierung das Zusammenschalten von Funktionen im Vordergrund. Ein Programm wird dabei nicht so sehr durch nacheinander abzuarbeitende Befehle, sondern durch ineinander geschachtelte Funktionsaufrufe beschrieben. Dabei stehen die sog. pure functions im Vordergrund, also Funktionen ohne Seiteneffekte. Weiterer wichtiger Bestandteil ist die Rekursion, mit der Probleme elegant gelöst werden können.
Clojure
Clojure ist ein LISP-Dialekt, läuft auf der Java VM und ist seit 2009 verfügbar. Als Einstieg habe ich mir das Buch Practical Clojure (Blick ins Buch) gekauft, an dem ich mich nun entlang arbeite.
Die wichtigsten Merkmale von Clojure sind
- Datenstrukturen sind unveränderlich (immutable)
- Alles ist eine Liste
- Durch die Java VM hat man Zugriff auf alle Bibliotheken (von Oracle und anderen)
Explorative Entwicklung
In Clojure (und anderen Sprache?) hat sich die REPL durchgesetzt: Read Eval Print Loop. Man startet eine Kommandozeile, in der man direkt Code eingeben und ausführen kann. Damit lässt sich schnell etwas ausprobieren oder sogar ein laufendes Programm verändern. Für die ersten Schritte arbeite ich auch direkt in der REPL und verzichte auf gespeicherte Quelltexte. Natürlich lässt sich jede Clojure-Applikation auch in Dateien organisieren und ausführen.
Download und Start
Clojure kann als ZIP-Archiv heruntergeladen oder direkt von Github gecloned und gebaut werden. Hat manÃÂ Clojure entpackt bzw. installiert, liegt im Installationsverzeichnis die Datei clojure.jar. Mit folgender Kommandozeile starte ich anschliessend die REPL:
java -cp clojure.jar clojure.main
Ich werde durch einen Prompt begrüßt und kann sofort Code eingeben:
java -cp clojure.jar clojure.main
Clojure 1.3.0-alpha3-SNAPSHOT
user=>
Jetzt kann ich das erste Programm schreiben.
Hallo, Welt!
Als erstes Programm steht natürlich das klassische Hallo Welt auf dem Programm. Die Anwendung soll den String “Hallo, Welt!” ausgeben, nichts weiter.
(println "Hallo, Welt!")
Die Ausgabe sieht so aus:
Hallo Welt
nil
user=>
Die erste Zeile ist die Ausgabe, die zweite Zeile ist der Rückgabewert der Funktion println und die dritte Zeile ist wieder der Prompt. Die Funktion println ist eine sog. special form, eine Systemfunktion von Clojure. Die übergebenen Argumente werden durch Leerzeichen getrennt ausgegeben. Ein etwas erweitertes Hallo Welt verwendet eine Var für die auszugebende Nachricht:
(def msg "Hallo Welt")
(println msg)
Das war es erstmal für diesen Artikel. In den kommenden Artikeln will ich etwas weiter in die verfügbaren Datenstrukturen einsteigen. Stichwort: Alles ist eine Liste!