The Power of Java 8
Über sechs Jahre ist es nun her, dass Ola Bini im Rahmen der Google Tech Talks den Vortag JRuby: The power of Java and Ruby gehalten hat. Am Anfang dieser Präsentation steht ein Beispiel, das zeigen soll, wie ausdrucksstark die Programmiersprache Ruby im Vergleich zu Java ist. Dieses Beispiel wird seither gerne zitiert und hervorgeholt, um Java für seine Geschwätzigkeit zu kritisieren.
Die Ruby-Implementierung des Beispiels ist im folgenden Listing zu sehen. Die Java-Variante aus dem Vortrag umfasst dagegen einschließlich der import
-Anweisungen und der Klassendefinition über 25 Zeilen. Ob dieser Vergleich nun fair ist, sei dahingestellt. Wichtig ist nur, welchen Eindruck er hinterlassen hat.
list = ['Ola', 'Charles', 'Tom', 'Marcin',
'Nick', 'Mentalguy', 'Bill', 'Vladimir']
puts list.sort_by(&:length).join(", ")
Mit Java 8 steht nun die bedeutendste Erweiterung der Sprache seit annähernd zehn Jahren kurz vor der Veröffentlichung. Neu in die Sprache kommen damit Lambda-Ausdrücke, Methoden-Referenzen und Default-Methoden. Dabei sollte man allerdings nicht übersehen, dass auch die Kern-Bibliothek an zahlreichen Stellen erweitert worden ist. Denn gerade mit diesen Erweiterungen muss Java den alten Vergleich mit Ruby nicht länger scheuen.
Das folgende Listing zeigt, dass die Implementierung mit Java 8 fast genauso kompakt wie die mit Ruby ist. Der Aufbau ist dabei unverändert objektorientiert und imperativ, so wie in Java üblich. Tatsächlich sind es die kleinen Erweiterungen, die es möglich machen, den Umfang gegenüber Java 7 zu reduzieren. So können nun neue Comparatoren sehr einfach definiert werden, und für die String-Verknüpfung stehen neue Methoden wie beispielsweise String.join
zur Verfügung.
List<String> list = Arrays.asList(
"Ola", "Charles", "Tom", "Marcin", "Nick", "Mentalguy", "Bill", "Vladimir");
list.sort(comparingInt(String::length));
System.out.println(String.join(", ", list));
Man sollte aus diesem Beispiel nicht ableiten, dass sich mit Java 8 aller Code auf einen Bruchteil reduzieren lässt – genauso wenig wie mit Ruby. Es ist auch nicht so, dass Java 8 nun alle Features von Ruby enthält. Doch zumindest lässt sich sagen: Java wird wieder moderner und schließt zu den anderen Sprachen auf.