Limit search to available items
Book Cover
E-book
Author Prähofer, Herbert

Title Funktionale Programmierung in Java Herbert Prähofer
Published [S.l.] : dpunkt, 2020

Copies

Description 1 online resource
Contents Intro -- Inhaltsverzeichnis -- Vorwort -- 1 Einleitung -- 1.1 Elementare Konzepte und Begriffe -- 1.2 Funktionale Programmierung in Java -- 2 Sprachliche Grundlagen -- 2.1 Java Generics -- 2.1.1 Typparameter -- 2.1.2 Typconstraints -- 2.1.3 Ko- und Kontravarianz -- 2.1.4 Typinferenz bei Generics -- 2.1.5 Schwachstellen der Generics in Java -- 2.2 Default-Methoden -- 2.3 Lambda-Ausdrücke -- 2.3.1 Formen von Lambda-Ausdrücken -- 2.3.2 Typ eines Lambda-Ausdrucks -- 2.3.3 Ausnahmen bei Lambda-Ausdrücken -- 2.3.4 Closures -- 2.4 Funktionale Interfaces -- 2.5 Methodenreferenzen -- 2.6 Zusammenfassung -- 3 Programmieren ohne Seiteneffekte -- 3.1 Reine Funktionen -- 3.1.1 Iteration vs. Rekursion -- 3.1.2 Referentielle Transparenz und Ersetzungsprinzip -- 3.1.3 Funktionen mit Gedächtnis -- 3.2 Funktionale Ausnahmebehandlung mit Optional -- 3.3 Funktionale Listen -- 3.3.1 Beispielanwendung -- 3.4 Paare und Tupel -- 3.5 Zusammenfassung -- 4 Programmieren mit Funktionsparametern -- 4.1 Listenverarbeitung mit Funktionen höherer Ordnung -- 4.2 Flexible Programmschnittstellen -- 4.3 Algorithmen -- 4.3.1 Tiefensuche -- 4.3.2 Verallgemeinerung der Suche -- 4.4 Entwurfsmuster -- 4.4.1 Strategie -- 4.4.2 Kommando -- 4.4.3 Besucher -- 4.5 Eingebettete und bedingte Ausführung -- 4.5.1 Eingebetteter Code -- 4.5.2 Bedingte Ausführung -- 4.5.3 Fallunterscheidungen -- 4.5.4 Typtests -- 4.6 Auswertung nach Bedarf -- 4.6.1 Faule Iteratoren -- 4.6.2 Unendliche Folgen -- 4.6.3 Faule Iteration über die Knoten eines Graphen -- 4.7 Zusammenfassung -- 5 Kombination von Funktionen -- 5.1 Flüssige Schnittstellen -- 5.2 Funktionskomposition -- 5.2.1 Aufrufketten beim funktionalen Interface Function -- 5.2.2 Logische Verknüpfungen bei Predicate -- 5.2.3 Bilden von Vergleichsketten mit Comparator -- 5.2.4 Beispiel-Workflows -- 5.3 Kombinator-Parser
5.3.1 Parser und Parser-Ergebnisse -- 5.3.2 Kombinationsoperatoren -- 5.3.3 Parser für Boolesche Ausdrücke -- 5.4 Domänen-spezifische Sprachen -- 5.4.1 Fallbeispiel Zustandsmaschinen -- 5.5 Zusammenfassung -- 6 Funktoren, Monoide und Monaden -- 6.1 Funktoren -- 6.1.1 Funktor Optional -- 6.1.2 Gesetze und Eigenschaften -- 6.2 Monoide und Reduktion -- 6.2.1 Monoide -- 6.2.2 Reduktion -- 6.2.3 Monoide in Java -- 6.2.4 Reduzierbare Strukturen -- 6.2.5 Anwendungsbeispiele zur Reduktion mit Monoiden -- 6.3 Monaden -- 6.3.1 Monade Optional -- 6.3.2 Monade Parser -- 6.3.3 Gesetze -- 6.3.4 Bedeutung von Monaden -- 6.3.5 MonadPlus: Monade mit monoider Kombination -- 6.4 Zusammenfassung -- 7 Streams -- 7.1 Grundlagen von Streams -- 7.1.1 Ein erstes Beispiel -- 7.1.2 Externe vs. interne Iteration -- 7.1.3 Bedarfsauswertung -- 7.2 Klassen von Streams -- 7.3 Stream-Operationen -- 7.3.1 Erzeuger-Operationen -- 7.3.2 Zwischenoperationen -- 7.3.3 Terminal-Operationen -- 7.4 Collectors -- 7.4.1 Interface Collector -- 7.4.2 Vordefinierte Collectors -- 7.4.3 Downstream Collectors -- 7.4.4 Eine eigene Collector-Implementierung -- 7.5 Anwendungsbeispiele -- 7.5.1 Ergebnisauswertung mit Streams -- 7.5.2 Wortindex zu einem Text -- 7.6 Hinweise -- 7.6.1 Einmal-Iteration -- 7.6.2 Begrenzung von unendlichen Streams -- 7.6.3 Zustandslose und zustandsbehaftete Operationen -- 7.6.4 Reihenfolge von Operationen -- 7.6.5 Kombinationen von Operationen -- 7.7 Interne Implementierung -- 7.7.1 Beispiel -- 7.8 Zusammenfassung -- 8 Parallele Streams -- 8.1 Erzeugen von parallelen Streams -- 8.2 Parallele Ausführung -- 8.2.1 Spliterators -- 8.2.2 Ausführung durch Fork/Join-Pool -- 8.2.3 Konfiguration des Fork/Join-Thread-Pools -- 8.3 Bedingungen bei paralleler Ausführung -- 8.3.1 Parallele Ausführung und Seiteneffekte -- 8.3.2 Parallele Ausführung und zustandsbehaftete Berechnungen
8.3.3 Eigenschaften der Parameter von reduce -- 8.3.4 Paralleles Sammeln -- 8.4 Laufzeit -- 8.5 Zusammenfassung -- 9 Asynchrone Funktionsketten -- 9.1 Eine Lösung mit parallelen Streams -- 9.2 Asynchrone Lösung mit Futures -- 9.3 CompletableFuture -- 9.4 Asynchrone Programmschnittstellen -- 9.5 CompletableFuture als Promise -- 9.6 Kombination von CompletableFutures -- 9.6.1 Beispiel -- 9.7 Zusammenfassung -- 10 Reaktive Streams -- 10.1 Grundlagen -- 10.1.1 Kontrakt von Observable -- 10.1.2 Erzeugen von Observables -- 10.1.3 Anmelden und Abmelden von Observer -- 10.2 Varianten -- 10.2.1 Single -- 10.2.2 Completable -- 10.2.3 Maybe -- 10.3 Hot und Cold Observables -- 10.3.1 ConnectableObservable -- 10.3.2 Beispiel Echtzeitdaten -- 10.4 Operationen -- 10.4.1 Abbildungen -- 10.4.2 Filtern und Teilmengen -- 10.4.3 Reduktion -- 10.4.4 Sammeln -- 10.4.5 Operationen mit Zeit -- 10.4.6 Kombinationen -- 10.4.7 Konvertierungen -- 10.4.8 Seiteneffekte -- 10.5 Nebenläufigkeit -- 10.5.1 Serialisierung von nebenläufigen Ereignissen -- 10.5.2 subscribeOn und Scheduler -- 10.5.3 observeOn -- 10.6 Fehlerbehandlung -- 10.6.1 Fehlerereignisse auslösen -- 10.6.2 Auf Fehler reagieren -- 10.7 Rückstau und Flusskontrolle -- 10.7.1 Reduktion der Menge der Ereignisse -- 10.7.2 Flowables -- 10.8 Testen reaktiver Streams -- 10.9 Zusammenfassung -- 11 Testen mit und von Funktionen -- 11.1 Funktionsparameter bei JUnit 5 -- 11.2 AssertJ: Eine DSL für Unit-Tests -- 11.3 Eigenschaftsbasiertes Testen nach QuickCheck -- 11.3.1 Generatoren von Zufallswerten -- 11.3.2 Tests -- 11.3.3 Shrinken der Werte -- 11.4 Zusammenfassung -- 12 Weiterführende Konzepte -- A Bibliografie -- B Laufzeitexperimente Parallele Streams -- Index
Summary Mit der Version 8 erhielt die objektorientierte Programmiersprache Java die Möglichkeit, mit ihr funktional zu programmieren. Dieser Programmierstil hat seitdem bei Java-Entwicklern immer mehr an Popularität gewonnen, getrieben durch den Trend zu datenzentrierten Anwendungen und neueren Programmiersprachen, die funktionale Programmierung (z.B. Scala, Kotlin) einfach möglich machen. Das Buch richtet sich sowohl an Einsteiger in Java, die einen tieferen Einblick in die funktionale Seite der Sprache erhalten möchten, als auch an erfahrene Java-Entwickler, die ihre tägliche Arbeit um funktionale Aspekte erweitern möchten
Notes Title from content provider
Subject Computer programming.
Java (Computer program language)
computer programming.
Computer programming
Java (Computer program language)
Form Electronic book
ISBN 9783864907579
3864907578
3960889844
9783960889847
1098124618
9781098124618