JavaRush /Java-Blog /Random-DE /Kaffeepause Nr. 131. Die Rolle von Java bei der Entwicklu...

Kaffeepause Nr. 131. Die Rolle von Java bei der Entwicklung von Web- und Mobilanwendungen. Funktionale Programmierung – Vor- und Nachteile

Veröffentlicht in der Gruppe Random-DE

Die Rolle von Java bei der Entwicklung von Web- und Mobilanwendungen

Quelle: DZone Java ist eine der am häufigsten verwendeten Programmiersprachen. Es wird aktiv bei der Entwicklung von Unternehmens-, Web- und Mobilanwendungen eingesetzt. Java findet Anwendung in führenden Technologiebranchen, von Data Science bis AR/VR. Obwohl die Unternehmensentwicklung in Java der beliebteste Anwendungsfall für diese Sprache ist, gelten auch Web- und Mobilanwendungen als einer der Bereiche, in denen Java eingesetzt wird. Kaffeepause Nr. 131.  Die Rolle von Java bei der Entwicklung von Web- und Mobilanwendungen.  Funktionale Programmierung – Vor- und Nachteile – 1Werfen wir einen Blick darauf, warum die Java-Entwicklung in den letzten zwei Jahrzehnten im Web und auf Mobilgeräten so beliebt geworden ist. Einer der Hauptgründe für die Verwendung von Java für Web und Mobilgeräte ist, dass es sich um eine leistungsstarke Programmiersprache handelt. Es stellt sicher, dass Ihre Anwendungen schnell und ohne Verarbeitungsfehler ausgeführt werden können. Es gibt auch andere Gründe:

1. Open Source

Als Open-Source-Programmiersprache bietet Java eine Reihe von Vorteilen. Erstens werden die Kosten des Anwendungsentwicklungsprozesses gesenkt. Zweitens können Entwickler die Sprache leicht ändern und häufig aktualisieren, da es sich um Open Source handelt. Darüber hinaus verfügt Java über eine leicht lesbare Syntax, die die Entwicklung von Anwendungen für das Web und mobile Geräte erleichtert. Schließlich können Entwickler die vorhandene Sprachcodebasis nutzen und verbessern.

2. Plattformübergreifend

Ein weiterer Vorteil der Programmierung in Java besteht darin, dass es sich um eine plattformübergreifende Sprache handelt. Entwickler können Code unter Windows schreiben und ihn unter macOS und Linux ausführen. Hier gilt der Grundsatz „Einmal schreiben, überall ausführen“. Dies erleichtert Entwicklern die Arbeit auf verschiedenen Systemen und vereinfacht den Testprozess auf verschiedenen Maschinen. Entwickler können beispielsweise testen, ob ein Programm auf unterschiedlichen Bildschirmgrößen und Betriebssystemen korrekt läuft.

3. Mobilfreundlich

Java ist eine beliebte Technologie für mobile Anwendungen. Android-App-Entwickler verwenden hauptsächlich die Java-Sprache, weil sie einfach zu implementieren ist, über Sicherheitsfunktionen und plattformübergreifende Funktionen verfügt. Android benötigt eine leistungsstarke Sprache, um eine Anwendung zu skalieren, aber Java bietet erstaunliche Skalierungsfunktionen. Es vereinfacht auch den Prozess des Testens von Android-Anwendungen. All dies deutet darauf hin, dass es sich um eine zuverlässige und dynamische Programmiersprache zum Erstellen mobiler Anwendungen handelt.

4. Tools und Bibliotheken

Einer der größten Vorteile von Java ist seine Kompatibilität mit verschiedenen Tools. Frameworks wie Spring, Hibernate, Struts, Spark und andere vereinfachen den Entwicklungsprozess erheblich. Alle diese Tools bieten verschiedene Funktionen zum Erstellen interaktiver und dynamischer Anwendungen. Bibliotheken wie Apache Commons, Java Standard Libraries, Maven, Jackson usw. ermöglichen es Entwicklern, Funktionen hinzuzufügen, ohne Code von Grund auf neu schreiben zu müssen.

5. Aktive Gemeinschaft

Weltweit gibt es mehr als 7,6 Millionen Java-Entwickler. Sie aktualisieren die Programmiersprache ständig und fügen ihr neue Funktionen hinzu. Da Java alle 6 Monate aktualisiert wird, haben Entwickler die Möglichkeit, schnell zu lernen und bessere Produkte zu erstellen. Sie können auch die Java-Community nutzen, um Antworten auf verschiedene Fragen zu finden.

Der Aufstieg von Java in der Webanwendungsentwicklung

Seit ihrer Gründung im Jahr 1995 durch Sun Microsystems ist die Java-Sprache zu einer der Prioritäten in der Programmierbranche geworden. Heutzutage verwenden Unternehmen auf der ganzen Welt diese Programmiersprache, um Webanwendungen zu erstellen. Google, Netflix, Spotify und Pinterest sind nur einige Unternehmen, die Java in ihrem Technologie-Stack verwenden. Experten schätzen, dass mehr als 60 % der in der IT tätigen Unternehmen Java in der einen oder anderen Form nutzen. Darüber hinaus ist sie nach wie vor eine beliebte Programmiersprache, da sie auch in anderen Bereichen der Webentwicklung eingesetzt wird, nämlich Cloud Computing, soziale Medien, Unternehmensentwicklung, AR, VR und mehr. Es handelt sich um eine hervorragende und leistungsstarke Programmiersprache für den Einsatz in Unternehmen, die jetzt eine cloudbasierte Architektur benötigen. In Kombination mit JavaScript können Sie mit Java leistungsstarke Webanwendungen erstellen, die auf jeder Plattform ausgeführt werden können.

Der Aufstieg von Java in modernen Anwendungsfällen

Neben der Web- und Mobilentwicklung hat sich Java in der modernen Technologiewelt einen Namen gemacht. Heute ist Java eine äußerst nützliche Programmiersprache für wissenschaftliche Anwendungen. Es bietet eine sichere, schnelle und tragbare Umgebung für wissenschaftliches Rechnen. MATLAB ist eine der beliebtesten Bibliotheken für Java-basierte wissenschaftliche Anwendungen.
  • Java ist auch bei der Front-End- und Back-End-Entwicklung wissenschaftlicher Anwendungen nützlich. Sie können Struts und Java Server Pages für die Front-End-Entwicklung und Java Core für die Back-End-Entwicklung wissenschaftlicher Anwendungen verwenden.

  • Java ist auch für die Datenanalyse nützlich. Es ermöglicht Entwicklern, Datenanalyselösungen mithilfe verschiedener Bibliotheken und Tools zu erstellen. Heute findet Java Anwendung im Segment Internet der Dinge. Es handelt sich um eine Schlüsseltechnologie in eingebetteten Systemen wie Smartcards und Sensoren. Daher verwenden Unternehmen diese Programmiersprache in der Hausautomationsbranche. Darüber hinaus wird es aktiv bei der Entwicklung von Streaming-Gerätetechnologien und Smart TV eingesetzt.

  • Die Hadoop-Big-Data-Plattform ist in Java geschrieben. Da es sich um eine Open-Source- und objektorientierte Sprache handelt, ist sie der Grundstein für Big-Data-Anwendungen. Programmiersprachen wie Scala können problemlos auf der Java Virtual Machine ausgeführt werden und erleichtern die Analyse großer Datenmengen.

  • Gaming ist eine aufstrebende und schnell wachsende Branche, in der Java häufig für verschiedene Gaming-Anwendungen verwendet wird. Es bietet beispielsweise Unterstützung für jMonkeyEngine, die größte Open-Source-Engine zur Entwicklung von 3D-Spielen. Darüber hinaus wird Dalvik Virtual Machine (DVM) hauptsächlich von Java unterstützt und zur Erstellung interaktiver Spiele für Android verwendet.

Funktionale Programmierung – Vor- und Nachteile

Quelle: Dev.to Trotz meiner traditionellen Skepsis gegenüber unbekannten Technologien erkenne ich die Vorteile der funktionalen Programmierung. Nachfolgend finden Sie eine ungefähre Liste der Vorteile, die dieses Programmierparadigma beschreiben. Kaffeepause Nr. 131.  Die Rolle von Java bei der Entwicklung von Web- und Mobilanwendungen.  Funktionale Programmierung – Vor- und Nachteile – 2

Sichere Parallelität

Der funktionale Ansatz fördert sichere Parallelität, d. h. die Möglichkeit, Jobs in separaten Threads auszuführen, ohne Thread-Konflikte oder Änderungskollisionen zu verursachen. Der Grund dafür ist, dass Sie im Gegensatz zum Objektansatz kein Objekt gemeinsam nutzen, dessen Zustand während der Verarbeitung geändert werden kann. Es gibt Ein- und Ausgänge, und der Eingang verändert sich nicht durch dich. Selbst wenn Sie in Java „threadsichere“ Objekte verwenden, können Sie nicht garantieren, dass diese beim Aufruf Ihrer Methode dieselben Werte haben. Im folgenden Beispiel können wir sehen, dass eine Schleife, die Elemente einzeln verarbeitet, mithilfe einer Lambda-Funktion innerhalb eines Threads problemlos parallel verarbeitet werden kann.
for( String item : items ) {
   process(item);
}
Und jetzt wird es:
items.parallelStream().forEach( item -> process(item) );

Schnelle E/A

Funktionale Programmierung unterstützt einen anderen Ansatz als Multithreading. Das bedeutet, dass wir keine separaten Threads mehr haben, die auf E/A-Antworten wie Datenbankaufrufe warten. Das heißt, wir maximieren die CPU- und Bandbreitennutzung. Für Hochleistungsanwendungen ist dies ein klarer Vorteil. Dies wird mit der Idee umgesetzt, dass ein Funktionsaufruf eine Zukunft zurückgeben kann, die nicht das tatsächliche Ergebnis des Aufrufs ist, sondern eher ein Versprechen, das Ergebnis irgendwann in der Zukunft zurückzugeben. Irgendwann in der Zukunft wird ein Rückgabewert erhalten, der die Funktion ausführt. Dies bedeutet, dass die Prozessor-Threads nicht auf den Abschluss von Datenbank- oder REST-Aufrufen warten und etwas anderes tun können.

Kürze des Ausdrucks

Softwareentwickler möchten in der Lage sein, komplexe Ideen elegant auszudrücken. Mit der funktionalen Programmierung können Sie dies präzise tun. Beispielsweise können gemeinsame Konstrukte wie for-Schleifen durch Threads ersetzt werden, die die gemeinsamen for-Operationen abstrahieren, für die Schleifen verwendet werden. Es besteht kein Zweifel daran, dass die Hinzufügung von Lambda-Funktionen und -Threads zu Java die Möglichkeiten erweitert hat, Ideen auszudrücken, die zuvor unmöglich waren.

Warum nicht funktionsfähig werden?

Um das oben Gesagte noch einmal zu wiederholen: Es gibt viele Vorteile der funktionalen Programmierung. In diesem Artikel wird daher nicht versucht, alles auf einen Fall zu verallgemeinern und zu sagen, dass Sie unbedingt funktionale Programmierung betreiben sollten oder umgekehrt. Diese Entscheidung muss mit einem klaren Verständnis der Gründe für den Übergang und möglicher Probleme getroffen werden.

Es ist immer schwierig, es intuitiv zu verstehen

Versuchen Sie beim Schreiben von Code, mit dem Computer zu kommunizieren? Wenn Ihnen die Kommunikation mit einem Computer so wichtig ist, warum schreiben Sie nicht in Maschinencode? Das ist natürlich sehr schwierig, deshalb wurden Computersprachen erfunden, um es einfacher zu machen. Sie ermöglichen es Programmierern auch, Ausdrücke zu erstellen, die andere Programmierer verstehen können. Da Software immer größer und komplexer wird, benötigen wir Strategien zur Bewältigung der Komplexität. Dies erreichen wir durch Abstraktionen und Information Hiding. Die Klasse, die Sie in Java zum Senden von E-Mails verwenden, ist recht komplex, aber die Schnittstelle dieser Klasse ist einfach. Es verbirgt die detaillierte Implementierung und offenbart uns nur die äußere Seite der Steuerung. Sprachmerkmale wie geschweifte Klammern und eckige Klammern verraten uns Strukturen wie bedingte Anweisungen und Schleifen. Erst jetzt verschieben wir Schleifen bzw. Rekursionen und Bedingungen in Funktionen:
for( String item : items ) {
    System.out.println(item);
}
Es stellt sich heraus:
items.foreach( item -> System.out.println(item) );
Der Streaming- und der Lambda-Ansatz sind definitiv kürzer. Sie können die gleiche Funktionalität mit weniger Code ausdrücken. Das Problem besteht darin, dass wir jetzt das tatsächliche Verhalten innerhalb der Methoden verbergen, das wir kennen müssen. Schleifen in Java verwenden Schlüsselwörter. Andererseits können Lambda-Funktionen verschiedene Formen der Rekursion implementieren, und nur der Name hier verrät, was sie tun. Zum Beispiel:
boo.fooble( item -> System.out.println(item) );
Sie können nicht mehr nur den Code lesen, um die Struktur zu verstehen. Dies macht es schwierig, den Ausführungsfluss zu verfolgen. Ein weiteres Merkmal ist die Funktionsverkettung, bei der das Ergebnis einer Funktion die Eingabe der nächsten ist, ohne dass eine Zwischenvariable zugewiesen wird.
boolean result = boo
    .fooble( /*some code*/ )
    .bobble( /*some code*/)
    .goober( /*some code*/);
Dies könnte für den Autor dieses Codes sinnvoll sein, da er anscheinend jede Funktion geschrieben hat und weiß, was sie tut. Für Code-Neulinge sagt dies jedoch nicht viel über die Parameter, Prozesse oder Rückgabewerte der einzelnen Funktionen aus. Aber wenn Sie dasselbe in etwas schreiben, das Typen zuweist, erhalten Sie:
Car car = boo.fooble( /*some parameters*/);
Tyre tyre = car.bobble( /*some parameters*/);
int pressure = tyre.goober( /*some parameters*/);
Dies ist möglicherweise keine perfekte Analogie, da Parameter und anonyme Funktionen nicht dasselbe sind. Der Punkt hier ist jedoch, dass ein langer Satz mit unbekannten Ergebnissen und Parametern schwer zu lesen ist, ohne ein tieferes Verständnis dafür zu haben, was die unten beschriebenen Funktionen bewirken. Daher ist es möglich, dass funktionale Programmierung in überraschend kurzen Codesegmenten zwar sehr ausdrucksstark ist, für Software-Neulinge jedoch unverständlich ist. Der Zweck von Klassen und Schnittstellen besteht darin, Daten zu verbergen und wiederverwendbare Codeteile zu erstellen, die nicht erfordern, dass der Entwickler die Implementierung versteht oder sich vielleicht sogar damit befasst. Sie existieren, damit Entwickler problemlos an großen, komplexen Systemen arbeiten können. Dies ist eine praktische Möglichkeit, Code zu organisieren, der bestimmten Entitäten zugeordnet ist. Allerdings habe ich wenig Verständnis dafür, wie funktionale Programmierung bei der Strukturierung großer komplexer Projekte hilft. Dafür gibt es vermutlich subjektive Gründe.

Um andere mit Ihren Fähigkeiten zu beeindrucken

Manche Softwareentwickler sind in ihren Fähigkeiten so unsicher, dass sie versuchen zu beeindrucken, indem sie unnötig komplexen Code schreiben. Als leitender Entwickler bewundere ich andere Softwareentwickler nicht besonders, die versuchen, intelligenten Code zu schreiben. Dies gilt natürlich nicht nur für die funktionale Programmierung; Das Gleiche kann in jedem Codierungsstil passieren. Aber ich habe eine gewisse intellektuelle Eitelkeit unter den Befürwortern der funktionalen Programmierung festgestellt. Der Punkt ist, dass Softwareentwickler nicht im luftleeren Raum arbeiten. Dieser „intelligente“ Code muss gepflegt werden, und wenn er schwer zu verstehen ist, ist er auch schwer zu lesen und zu ändern und schwer zu debuggen. Wenn wir Teams leiten, beschäftigen wir Menschen auf allen Ebenen. Daher ist es am klügsten, Code so zu schreiben, dass alle Beteiligten ihn verstehen können. Aus diesem Grund haben wir klare lange Variablennamen und begrenzen daher die Länge der Methoden. „Intelligenter“ Code nimmt zusätzliche Zeit in Anspruch, daher ist es nicht sehr intelligent, ihn zu schreiben. Ich glaube, dass die funktionale Programmierung dieselben Argumente für prägnante und aussagekräftige Ausdrücke verwendet, die Perl vor vielen Jahren vorgebracht hat. Die Unterstützer von Perl waren stolz auf seine Ausdruckskraft und die Art und Weise, wie sie mit nur wenigen Codezeilen sehr leistungsfähige Programme schreiben konnten. Es war wahr. Das Problem war, dass sie schwer zu verstehen waren. Vielleicht ist die funktionale Programmierung in die gleiche Falle getappt.

Weil es eine neue Mode ist

Es gibt immer eine „heiße“ neue Technologie oder ein neues Paradigma. Ständig entstehen neue Technologien, Sprachen und Ansätze. Wir müssen uns ständig selbst herausfordern und neue Dinge lernen. Softwareentwickler zu sein bedeutet, die Technologie voranzutreiben. Aber als Softwareentwickler müssen wir selbst beurteilen, welche Technologien wir zur Erstellung eines Produkts benötigen. Eine neue, beliebte Technologie zu erlernen, nur weil sie beliebt ist, ist keine sinnvolle Zeitnutzung. Das bedeutet nicht, dass Sie keine funktionale Programmierung erlernen sollten, sondern vielmehr, dass Sie die Vor- und Nachteile dieses Paradigmas für die Anwendung, die Sie schreiben, abwägen sollten.

Denn das ist der einzig wahre Weg

Ich habe schon oft erlebt, dass Entwickler diesen oder jenen Ansatz als den einzig richtigen angepriesen haben. Aber wie mir ein Freund sagte, erfordern unterschiedliche Arbeiten unterschiedliche Werkzeuge. Ich persönlich verwende beispielsweise Python und PyTorch für künstliche Intelligenz, obwohl es viele andere Tools und Technologien gibt, die jeweils ihre eigenen Vor- und Nachteile haben. Es gibt gute Gründe, funktionale Programmierung als Option für Dienste in Betracht zu ziehen, die eine erhebliche Skalierbarkeit erfordern. Dies liegt an der Parallelitätssicherheit, die dieser Ansatz bietet. Sie sollten sich aber auch der Kosten und potenziellen Risiken bewusst sein. Vor ein paar Jahren hatte ich eine ähnliche Erfahrung mit der Abhängigkeitsinjektion und Spring wurde als das beste für diesen Job angesehen. Als ich Spring-Unterstützer fragte, welche Vorteile es mit sich bringt, gaben sie mir keine klaren Antworten. Etwas Ähnliches beobachte ich jetzt bei einigen Puristen der funktionalen Programmierung, die offenbar eher eine Art religiöse Kampagne verfolgen als eine unparteiische Bewertung der Technologie. Übrigens war die Abhängigkeitsinjektion eine großartige Idee und ich kann jetzt ihre Vorteile klar erkennen. Ebenso denke ich, dass meine Bedenken hinsichtlich der funktionalen Programmierung eher mit der Art und Weise zu tun haben, wie sie verwendet wird, als mit der Frage, ob sie ein nützlicher und gültiger Ansatz ist.

Abschluss

Ziel dieses Artikels ist es nicht, eine klare Antwort auf die Frage zu geben, ob Sie funktionale Programmierung betreiben sollten. Der Punkt ist, wie Sie jede neue Technologie oder jeden neuen Ansatz bewerten. Die Hauptsache: Lassen Sie nicht zu, dass Ihr Ego Ihnen eine objektive Einschätzung versperrt. Softwareentwicklung ist kein Beweis für Ihre intellektuellen Fähigkeiten oder Ihre persönlichen Qualitäten. Es geht darum, Werte in der realen Welt zu schaffen. Wenn Ihnen die funktionale Programmierung hilft, dann nutzen Sie sie.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION