patpitchaya - Fotolia

Funktionale Programmierung in Java 8 oder Microsoft .NET

Die Debatte, ob.NET oder Java besser ist, dauert an. Im Hinblick auf funktionale Programmierung bieten beide Plattformen verschiedene Optionen.

Die wahrscheinlich längste und umfangreichste Debatte in der Softwareentwicklung ist, ob Java oder die Microsoft-.NET-Plattform und das jeweilige Ökosystem am besten ist. Beide haben loyale Unterstützer, doch es gibt auch eine ungebundene Community, die das Pendel entweder in die eine oder andere Richtung ausschlagen lässt.

Jedes Mal, wenn etwas Neues kommt, schlägt das Pendel in die jeweilige Richtung. Funktionale Programmierung stellt hier keine Ausnahme dar. Ist funktionale Programmierung in Java 8 besser als in .NET? Oder ist es umgekehrt?

Modularität und Zusammensetzbarkeit (Kompossibilität) sind die Ziele aller modernen Softwaredesigns. Historisch gesehen, wurden sie mit der objektorientierten beziehungsweise serviceorientierten Programmierung erreicht, bei denen eigenständige Komponenten aufgebaut und mit vorgegebenen Schnittstellen und Regeln entwickelt werden. Komplexe Funktionen haben notwendigerweise komplexe Zusammenhänge, was eine offene Komposition erschwert.

Mit der Mathematik beginnen

Funktionale Programmierung in Java 8 oder anderen Programmiermodellen ist eine mathematische Annäherung an ein Problem, wo Logik durch das Zusammenfügen von Funktionen gebaut wird, so dass die Eingabe zu einem immer die Ausgabe eines anderen ist. Die Variablen sind unveränderlich, und nur eine Funktion kann ein variables Ergebnis liefern.

Im Wesentlichen ist die Logik eine Art Funktionspipeline, die aus sogenannten Lambda-Ausdrücken aufgebaut ist. Das Konzept existiert in verschiedenen Formen bereits seit Jahrzehnten, wird aber immer beliebter, da Modularität und Kompossibilität immer wichtiger werden. Funktionale Programmierung wird in Java 8 unterstützt. Programmierer, die .NET einsetzen, wollen daher unter Umständen wissen, wie sie das Modell übernehmen können.

Es gibt zwei grundlegende Wege zur funktionalen Programmierung in .NET: Programmierer können C# verwenden und Features entwickeln, um Lambda-Funktionen zu unterstützen, oder sie können die Open Source funktionale Sprache verwenden, die Microsoft 2010 veröffentlich hat: F#.

Die meisten Nutzer von F# verwenden auch C#. Ich vielen Fällen verwenden sie es sogar in der gleichen Anwendung. Viele Entwickler möchten weiterhin C# einsetzen, wenn sie damit vertraut sind. Doch die meisten Entwickler, die zu F# gewechselt sind, sagen, dass es die bessere Wahl ist. Es ist daher empfehlenswert, wenn man funktionale Programmierung mit .NET machen möchte, dies in F# zu machen.

Für Java-Nutzer, vor allem diejenigen, die sich auf funktionale Programmierung in Java 8 konzentrieren, ist wohl der Weg über C# vergleichbar. Man kann funktionalen Code in C# schreiben und Konstrukte verwenden, die einige der wichtigsten Verhaltensweisen der funktionalen Programmierung erzwingen, zum Beispiel unveränderliche Variablen und Zustandslosigkeit (statelessness). Aber man kann auch objektorientierte oder imperative Programme schreiben. Dies ist mit dem Ansatz von Java 8 vergleichbar.

Mehr über F# erfahren

F# ist anders, denn es ist eine der wenigen Sprachen, die nur für die funktionale Programmierung entworfen wurde. Die meisten F#-Nutzer verweisen darauf, dass die Sprache am Anfang schwer zu erlernen ist, doch sobald man darüber hinweg ist, kann man bessere funktionale Programme schneller schreiben – bessere als in C# oder Java 8. F# ist außerdem die einzige kommerzielle Sprache für die funktionale Programmierung. Andere Optionen werden häufiger in wissenschaftlichen Zusammenhängen eingesetzt.

Der primäre Vorteil der kommerziellen Bindung von F# gegenüber anderen funktionalen Sprachen ist die Kombination aus einfacher Integration und funktionaler Reinheit. Man kann auf alle .NET- sowie Java-Bibliotheken, die zu .NET kompiliert sind, zugreifen – ein einfacher Ansatz. Gleichzeitig bietet F# funktionale und Lambda-Feinheit bei der Codierung und erzeugt mehr lesbaren Code.

Als .NET-Programmierer kann man ebenfalls F#-Einheiten kompilieren und sie dann in jeder anderen .NET-Sprache verwenden. Somit büßt man keine .NET-Funktionen und keine Integrität ein. Die ist der Grund, warum .NET-Programmierer zunehmend auf F# für funktionale Entwicklung setzen. Der Übergang ist relativ einfach.

Mehr zum Thema Softwareentwicklung:

IoT-Entwicklungsplattformen hauchen vernetzten Geräten Leben ein.

Eine Cloud-Entwicklungsumgebung für On-Premises-Anwendungen einsetzen.

Wie kann verteilte gleichzeitige Entwicklung zu Kosteneinsparungen beitragen?

Kostenloses E-Handbook: Grundlagen der App-Entwicklung für Android und iOS.

Oracle JET bietet Entwicklern verschiedene Tools für die Anwendungsentwicklung.

Das Verständnis für funktionale Datenstrukturen und die Unveränderlichkeit von Variablen in F# ist entscheidend, und das Konzept kann für C#- oder Java-Programmierer schwer zu erfassen sein. Datenstrukturen sind eines der wenigen Dinge, die in F# komplizierter sind, was nicht nur bedeutet, dass es den Wechsel erschwert, sondern auch dazu führen kann, dass man wieder zum objektorientierten imperativen Modell zurückwechselt.

Es ist daher empfehlenswert, sich über funktionale Datenstrukturen und die Substituierung von Funktionen für veränderliche Variablen genau zu informieren, bevor man tief in F# eintaucht und die Arbeit mit funktionaler Programmierung zu schwer findet. Ein Blick auf Beispiele für komplexe Datenstrukturen, einschließlich mathematischer Strukturen, ist ein guter Einstieg.

Es gibt keine spezifischen benannten Klassen in funktionaler Programmierung in Java 8 oder anderswo. Funktionale Elemente einer Anwendung sollten klar identifiziert werden, um Verwirrungen oder Fehler zu vermeiden. Das bedeutet, dass die Organisation des Codes entscheidend ist, vor allem in größeren Projekten.

Funktionale .NET-Programme sollten immer verpackt und benannt sein, um die Implementierungssprache und Zielarchitektur klar zu machen. Außerdem sollte man die Richtlinien der F# Core Engineering Group für das eigene Projekt berücksichtigen, um die Lesbarkeit der Paketnamen zu gewährleisten. Die Lesbarkeit des Funktionscodes wird durch die konsequente Einrückung zur Hervorhebung von Funktionselementen verbessert.

Über Microservices nachdenken

Während funktionale Programmierung Integrationsvorteile bietet, kämpfen viele .NET-Entwickler damit, funktionale Programmierung auf ihre Anwendungen zu beziehen, insbesondere webbasierte Applikationen. Funktionale Programme sind zustandslos, was bedeutet, dass sie nicht so nützlich sind wie Schnittstellen für GUI-Prozesse, wo es in der Anwendung üblich ist, einen Zustand beizubehalten, um Dialoge über mehrere Phasen zu unterstützen.

Eine Technik, die bei der Bewältigung dieser Prozesse berücksichtigt werden sollte, ist es, funktionale Elemente als Microservices zu denken. Best Practices für Microservices würden vorgeben, dass Microservices zustandslos und funktional sind, und funktionale Programmierung in Java 8 oder jeder anderen Programmiersprache zustandslose Komponenten per Design voraussetzt.

Für .NET-Benutzer, die an Azure gebunden sind, und deren Fokus es ist, ereignisgesteuerte Elemente einer Anwendung zu behandeln, unterstützt Microsoft funktionale Programmierung als Webservice über Azure Functions. Die Microservice-Denkweise hilft Entwicklern, Azure Functions zu verwenden, um die aktuelle Logik und sogar Azure Functions mit funktionalen Elementen im Data Center zu erweitern. Die Vorteile von Functions beim Event Handling sind auch eine gute Basis für Anwendungen der funktionalen Programmierung.

Die Azure-Verbindung zeigt, dass funktionale Programmierung ein natürlicher Partner für die Cloud ist, was der beste Grund für .NET-Anwender sein könnte, darüber nachzudenken. Wenn ein Unternehmen an Cloud Computing glaubt und es in-house oder extern Software entwickelt, sollte es einen genauen Blick auf funktionale Programmierung und Microsoft Tools wie F# werfen.

Folgen Sie SearchEnterpriseSoftware.de auch auf Twitter, Google+, Xing und Facebook!

Erfahren Sie mehr über Softwareentwicklung

- GOOGLE-ANZEIGEN

ComputerWeekly.de

Close