© Evgeny Atamanenko/Shutterstock.com
10 Gründe, warum Clojure besser als Java ist

Eine erwachsene Alternative zu Java


In diesem Jahr feiern wir den 25. Geburtstag von Java, der momentan beliebtesten Programmiersprache der Welt, wenn man dem TIOBE Index glauben darf [1]. Die populärste Programmiersprache der Welt zu werden, ist nicht unkompliziert. Vor allem, als die Sprache noch in den Kinderschuhen steckte, war es schwierig, alle von ihr zu überzeugen.

Guy Steele, der als Co-Autor an der Sprachspezifikation von Java beteiligt war, versuchte damals, Java als bessere Alternative zur Sprache der Wahl zur damaligen Zeit, C++, zu positionieren: „We were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp.“

Und so begab es sich, dass viele Programmierer in etwa die Hälfte des Pfades der Erleuchtung bestritten und zu Java wechselten. In diesem Artikel soll es um den darauffolgenden Teil der Reise gehen: Die Etappe hin zu Lisp, oder zumindest zu einem Lisp, dem Gipfel der Produktivität, wenn man Steele glauben darf. Das Lisp, von dem wir sprechen, nennt sich Clojure und ist eine Programmiersprache für die Java Virtual Machine (JVM), die 2007 von Rich Hickey entwickelt wurde. Auf der JavaOne 2004 hat Hickey einen Talk gehalten [2], den er mit einem Zitat von Adrian Cockroft (damals Netflix) [3] eröffnete: „A lot of the best programmers and the most productive programmers I know are writing everything in Clojure and swearing by it, and then just producing ridiculously sophisticated things in a very short time. And that programmer productivity matters.“

Die Kernaussage von Rich Hickeys Talk war, dass Clojure das Schreiben von besseren und flexibleren Anwendungen ermöglicht, und – noch wichtiger – Entwickler mit Clojure deutlich produktiver arbeiten können als mit Java. Es könnte damit zusammenhängen, warum ein großes Unternehmen wie Netflix auf Clojure als erwachsenere Alternative zu Java setzt. Auch WalmartLabs [4] ist so ein Beispiel, wie Anthony Marcer, der dort als Softwarearchitekt arbeitet, bestätigt: „Clojure shrinks our code base to about one-fifth the size it would be if we had written in Java.“

Die Programmiersprache Clojure hat sich also in der Welt der IT bewährt. Vielleicht ist das auch für Sie ein Grund, den Umstieg zu vollziehen? Wir haben zehn gute Gründe für Sie herausgearbeitet.

1. Clojure ist einfach

Rich Hickey hat ein ganzes Jahr seines Lebens dem Design der Sprache gewidmet. Sie sollte möglichst simpel sein – nicht zu verwechseln mit „leicht zu erlernen“. Wäre das der Fall, würde es vielleicht den ein oder anderen Java-Entwickler eher überzeugen. Der Pfad der programmatischen Erleuchtung ist niemals leicht, wie es scheint. Vielleicht ist er sogar in gewisser Hinsicht ein schmerzlicher, bedenkt man die ganzen Klammern und die alberne Präfixnotation.

Hat man allerdings das Nirvana erreicht, wird man feststellen, dass die Clojure-Syntax tatsächlich sehr simpel ist. Das wird etwa beim Schreiben von Funktionen sichtbar: Clojure macht es Entwicklern leicht, reine Funktionen zu schreiben, also Funktionen, die keine Nebeneffekte haben. Rich Hickey hat hierfür die Unveränderlichkeit (Immutability) als hilfreichen Faktor identifiziert. Sind die Variablen garantiert unveränderlich, wird der Code verständlicher und ist leichter zu testen.

2. Clojure ist datenorientiert

Die Simplizität von Clojure hängt unter anderem auch damit zusammen, dass die Sprache nicht objektorientiert ist, sondern datenorientiert. Anders als in Java werden die Daten durch unveränderliche Hash Maps repräsentiert, nicht durch Klassen. Diese Datenstrukturen lassen sich recht einfach via Funktionen manipulieren, sind aber voneinander unabhängig. Clojure ist philosophisch gesehen also an diesem Zitat von Alan J. Perils orientiert: „It is better to have 100 functions operate on one data structure than to have 10 functions operate on 10 data structures.“

Objektorientierung macht es nötig, das Rad neu zu erfinden, denn die Daten müssen in Klassen gewoben werden. In Clojure lässt sich hingegen das gleiche limitierte Set aus Datenstrukturen für alle Use Cases nutzen. Bei der Objektorientierung ist sogar jede neue Klasse eine eigenständige Sprache: Man muss zunächst ihre Methoden lernen, um auf die dahinter lauernden Datenstrukturen zugreifen zu können. Da Maps in Clojure unveränderlich sind, muss man sich keine Sorgen um Nebeneffekte machen.

An dieser Stelle ein kleines Beispiel. In Ring [5], einer Bibliothek für das Schreiben von Webanwendungen, ist ein Handler nichts anderes als eine Funktion, die eine Hash Map erwartet (Abfrage) und eine Hash Map zurückgibt (Antwort):

defn what-is-my-ip [request] {:status 200 :headers {"Content-Type" "text/plain"} :body (:remote-addr request)}...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang