Lambda-Ausdrücke und Methodenreferenzen

Effective Java: Let’s Lambda!


Wie bereits im letzten Beitrag unserer Reihe gesehen, gibt es in Java 8 neue Sprachmittel, die einen eher funktionalen Programmierstil in Java unterstützen werden. Diese neuen Sprachmittel sind die Lambda-Ausdrücke und die Methodenreferenzen. Damit wollen wir uns in diesem Beitrag näher befassen.

Diskussionen über Spracherweiterungen in Java für funktionale Programmierung hat es schon vor einigen Jahren gegeben. Seit der Freigabe von Java 5 wurde intensiv darüber nachgedacht, wie solche Erweiterungen aussehen könnten. Es gab drei konkrete Vorschläge in dieser als „Closure-Debatte“ bekannt gewordenen Anstrengung [1]. Neil Gafter, vormals als Compilerexperte bei Sun tätig, hatte sogar einen Prototyp-Compiler für den Vorschlag gebaut, an dem er mitgewirkt hatte. Dennoch hat sich keine Konvergenz der drei Closure-Vorschläge ergeben. Es hatte auch keiner der drei Vorschläge die uneingeschränkte Unterstützung von Sun Microsystems. Als Sun Microsystems dann auch noch von Oracle übernommen wurde, verlief die Closure-Diskussion ergebnislos im Sande. Es sah zunächst so aus, als würde es in Java keine Erweiterungen für die funktionale Programmierung geben.

Im Jahr 2009 setzte sich dann die Erkenntnis durch, dass Java ohne Closures (oder Lambdas, wie sie fortan hießen) gegenüber anderen Programmiersprachen veraltet aussehen könnte. Erstens gibt es Closure- bzw. Lambda-artige Sprachmittel in einer ganzen Reihe von Sprachen, die auf der JVM laufen. Zweitens braucht man auf Multi-CPU- und Multi-Core-Hardware eine einfache Unterstützung für die Parallelisierung von Programmen. Denn was nützen die vielen Cores, wenn die Applikation sie nicht nutzt, weil sie in weiten Teilen sequenziell und nur in geringem Umfang parallel arbeitet?

Nun bietet das JDK mit seinen Concurrency Utilities im java.util.concurrent-Package umfangreiche Unterstützung für die Parallelisierung. Die Handhabung dieser Concurrency Utilities ist aber anspruchsvoll, erfordert Erfahrung und wird allgemein als schwierig und fehleranfällig angesehen. Eigentlich bräuchte man für die Parallelisierung bequemere, weniger fehleranfällige und einfach zu benutzende Mittel. Doug Lea, der sich schon seit vielen Jahren um die Spezifikation und Implementierung der Concurrency Utilities in Java kümmert, hat dann prototypisch eine Abstraktion ParallelArray gebaut, um zu demonstrieren, wie eine Schnittstelle für die parallele Ausführung von Operationen auf Sequenzen von Elementen aussehen könnte [2]. Die Sequenz war einf...

Neugierig geworden?

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