Interview mit Jan Hauer

Funktional programmieren für Angeber

Hartmut Schlosser

Jan Hauer

Funktionale Programmierung liegt im Trend, hat aber auch den Ruf, kompliziert zu sein. Dass es auch einfach geht, und wie gut Java auf das funktionale Paradigma eingestellt ist, haben wir mit Jan Hauer, Senior Consultant bei EXXETA und Speaker auf der JAX 2019, besprochen.

Funktional Programmieren für Angeber

JAXenter: Funktionale Programmierung ist lange Zeit hinter der Objektorientierung zurückgetreten. Momentan erleben wir aber so etwas wie ein Revival. Weshalb kommt die funktionale Programmierung langsam wieder in Mode?

Mit funktionalen Techniken sind wir bestens für aktuelle Entwicklungen wie Cloud-Infrastruktur oder Microservices gerüstet.

Jan Hauer: Aufgrund der modernen Entwicklungen sind wir viel stärker mit Eventstreams und Parallelität konfrontiert. Für Eventstreams sind funktionale Sprachen mit einer reichhaltigen API ausgestattet. Die größte Herausforderung von Parallelität sind geteilte veränderliche Variablen. Reines funktionales Programmieren verzichtet auf änderbare Variablen, wodurch effiziente Parallelisierung begünstigt wird. Somit sind wir mit funktionalen Techniken bestens für aktuelle Entwicklungen wie Cloud-Infrastruktur oder Microservices gerüstet.

JAXenter: Kannst du einmal an einem Beispiel zeigen, wo funktionale Programmierung seine Vorteile voll ausspielen kann?

Jan Hauer: Beim funktionalen Programmieren werden Seiteneffekte ausgeschlossen. Dies zwingt uns zu einer sauberen Architektur und verbessert die Testbarkeit. Betrachten wir einmal einen RetourService. Bestellungen, welche Retour gegangen sind und bezahlt wurden, müssen erstattet werden:

class RetourService {
   final List<Bestellung> bestellungen;
   final BezahlService bezahlService;

  void erstatten(){
      for(Bestellung bestellung : bestellungen){
          if(bestellung.isBezahlt() && bestellung.isRetour()){
              bezahlService.erstatte(bestellung);
          }
      }
  }
}

Dies ist ein typisches Beispiel für ein OO-Design. Die Mischung zwischen Logik, Abhängigkeiten erschwert aber das Testen. Funktional trennen wir die Logik von den Daten und Abhängigkeiten:

Predicate<Bestellung> isBezahltUndIsRetour = it -> it.isBezahlt() && it.isRetour();

Somit können wir dies im Unit-Test vollständig testen. Die Methode erstatten wandelt sich entsprechend:

void ersatten(){
    bestellungen.stream().filter(isBezahltUndIsRetour).forEach(bezahlService::erstatte);
}

 

Treffen Sie Jan Hauer live auf der JAX 2019:

Funktional Programmieren für Angeber

Ein echter Survival-Kurs für Anfänger und fortgeschrittene Java-Entwickler, die sich mit funktionaler Programmierung konfrontiert sehen. Nach der Session kann jeder locker über Funktoren und Monoide diskutieren oder schnell einen Java-Stream mit einer gecurryten Funktion einbauen. Vor allem kennt man die Momente, in denen funktionales Programmieren hilfreich ist und wann eher nicht.

Dienstag, 7. Mai, 11:45 bis 12:45

Funktional mit Java

JAXenter: Wie weit kommt man mit Java, wenn man funktional programmieren möchte? Es gibt seit Java 8 ja die Lambda Expressions.

Jan Hauer: Java bringt mittlerweile vieles mit, sodass wir in der täglichen Arbeit die wesentlichen Techniken einsetzen können. Im Vergleich zu (rein) funktionalen Sprachen fällt die aufwändigere Notation auf, welche wir aber ja mittlerweile von Java gewohnt sind. Zusätzlich ist das Typ-System nicht für eine funktionale Sprache entworfen worden. Somit wird Java immer „nur“ einen funktionalen Stil erlauben, aber nie eine echte Umsetzung des funktionalen Paradigmas.

JAXenter: Was unterscheidet Java noch von einer „echten“ funktionalen Sprache wie Haskell oder LISP?

Jan Hauer: Der Compiler unterstützt uns nicht wirklich. Typinferenz (aka „var“) ist aufgrund des Typsystems für Lambda-Ausdrücke nicht möglich. Vor allem aber können wir die Seiteneffektfreiheit nicht sicherstellen. Deshalb bleibt funktionale Programmierung in Java eine Team-Konvention und kann nicht mittels der Schnittstellen kommuniziert werden. Im Detail demostriere ich das in meiner Session auf der JAX 2019.

JAXenter: Deine JAX-Session heißt Funktional Programmieren für Angeber – dabei spielst du wohl auf den Ruf der funktionalen Programmierung an, etwas esoterisch und schwer zugänglich zu sein. Was ist dran an diesem Ruf?

Funktionale Konzepte selbst sind oft relativ einfach.

Jan Hauer: In der Vergangenheit wurden funktionale Sprachen vor allem in der akademischen Welt genutzt und weiter entwickelt. Daher stammen viele Begriffe aus der Kategorientheorie, einem Teilgebiet der Mathematik. Solange wir jedoch keinen formalen Beweis über das Typ-System führen möchten, sollte uns das nicht weiter interessieren. Außerdem sind die Konzepte selbst oft relativ einfach. Auch das werde ich in meiner Session zeigen.

JAXenter: Was ist die Kernbotschaft deiner Session, die jeder mit nach Hause nehmen sollte?

Jan Hauer: Funktionales Programmieren ist nicht schwer, jeder kann es nutzen und sollte es auch als eines seiner Tools im Werkzeugkasten bereithalten.

JAXenter: Vielen Dank für dieses Interview!

Jan Hauer ist Senior Consultant bei der EXXETA AG. Als pragmatischer und erfahrener Java-Entwickler fokussiert er sich auf Spring Boot und Cloud-Native-Entwicklung. Seine Kompetenzen liegen insbesondere im Bereich der Softwarearchitektur, CI/CD und in Test-Driven Entwicklung in agilen Teams.
W-JAX 2019 Java-Dossier für Software-Architekten

Kostenlos: Java-Dossier für Software-Architekten 2019

Auf über 30 Seiten vermitteln Experten praktisches Know-how zu den neuen Valuetypes in Java 12, dem Einsatz von Service Meshes in Microservices-Projekten, der erfolgreichen Einführung von DevOps-Praktiken im Unternehmen und der nachhaltigen JavaScript-Entwicklung mit Angular und dem WebComponents-Standard.

 

Geschrieben von
Hartmut Schlosser
Hartmut Schlosser
Content-Stratege, IT-Redakteur, Storyteller – als Online-Teamlead bei S&S Media ist Hartmut Schlosser immer auf der Suche nach der Geschichte hinter der News. #java #eclipse #devops #machinelearning #seo. Zum Lächeln bringen ihn kreative Aktionen, die den Leser bewegen. @hschlosser
Kommentare

Hinterlasse einen Kommentar

1 Kommentar auf "Funktional programmieren für Angeber"

avatar
4000
  Subscribe  
Benachrichtige mich zu:
Steven
Gast

Ich möchte den funktionalen Programmierstil nicht mehr missen. 🙂