Cargando…

Funktionale Programmierung in Java

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 Programmie...

Descripción completa

Detalles Bibliográficos
Autor principal: Prähofer, Herbert
Formato: Electrónico eBook
Idioma:Indeterminado
Alemán
Publicado: [S.l.] : dpunkt, 2020.
Temas:
Acceso en línea:Texto completo (Requiere registro previo con correo institucional)

MARC

LEADER 00000cam a2200000Mu 4500
001 OR_on1202562928
003 OCoLC
005 20231017213018.0
006 m d
007 cr |n|||||||||
008 201010s2020 xx o ||| 0 und d
040 |a VT2  |b eng  |c VT2  |d UAB  |d OCLCO  |d OCLCF  |d ERF  |d CZL  |d OCLCO  |d OCLCQ 
019 |a 1295597209  |a 1300487741  |a 1303298110 
020 |a 9783864907579 
020 |a 3864907578 
020 |a 3960889844 
020 |a 9783960889847 
020 |a 1098124618 
020 |a 9781098124618 
029 1 |a AU@  |b 000071521768 
035 |a (OCoLC)1202562928  |z (OCoLC)1295597209  |z (OCoLC)1300487741  |z (OCoLC)1303298110 
041 |a ger 
082 0 4 |a 004  |q OCoLC 
049 |a UAMI 
100 1 |a Prähofer, Herbert. 
245 1 0 |a Funktionale Programmierung in Java  |h [electronic resource] /  |c Herbert Prähofer. 
260 |a [S.l.] :  |b dpunkt,  |c 2020. 
300 |a 1 online resource 
336 |a text  |b txt  |2 rdacontent 
337 |a computer  |b c  |2 rdamedia 
338 |a online resource  |b cr  |2 rdacarrier 
347 |a text file 
500 |a Title from content provider. 
520 |a 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. 
505 0 |a 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. 
505 8 |a 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. 
505 8 |a 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. 
590 |a O'Reilly  |b O'Reilly Online Learning: Academic/Public Library Edition 
650 0 |a Computer programming. 
650 0 |a Java (Computer program language) 
650 6 |a Programmation (Informatique) 
650 6 |a Java (Langage de programmation) 
650 7 |a computer programming.  |2 aat 
650 7 |a Computer programming.  |2 fast  |0 (OCoLC)fst00872390 
650 7 |a Java (Computer program language)  |2 fast  |0 (OCoLC)fst00982065 
776 |z 3-86490-757-8 
856 4 0 |u https://learning.oreilly.com/library/view/~/9781098124618/?ar  |z Texto completo (Requiere registro previo con correo institucional) 
994 |a 92  |b IZTAP