
Funktionale Programmierung in Java und Kotlin
Description
Alles über E-Books | Antworten auf Fragen rund um E-Books, Kopierschutz und Dateiformate finden Sie in unserem Info- & Hilfebereich.
More details
Other editions
Additional editions

Person
Content
- Cover
- Hinweise zur Benutzung
- Titel
- Impressum
- Inhalt
- Vorwort
- 1 Einleitung
- 1.1 Elementare Konzepte und Begriffe
- 1.2 Funktionale Programmierung in Java
- 1.3 Kotlin als Sprache für eine funktionale Programmierung
- Teil I Grundlagen der funktionalen Programmierung in Java
- 2 Sprachliche Grundlagen von Java
- 2.1 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 Funktionale Interfaces
- 2.3.2 Methodenreferenzen
- 2.4 Record-Klassen
- 2.5 Switch-Ausdrücke
- 2.6 Zusammenfassung
- 3 Programmieren ohne Seiteneffekte
- 3.1 Reine Funktionen
- 3.1.1 Iteration vs. Rekursion
- 3.1.2 Referenzielle Transparenz und Ersetzungsprinzip
- 3.2 Funktionale Ausnahmebehandlung mit Optional
- 3.3 Zusammenfassung
- 4 Funktionale Datenstrukturen
- 4.1 Algebraische Datentypen
- 4.2 Pattern Matching
- 4.3 Paare und Tupel
- 4.4 Funktionale Listen
- 4.5 Persistente Collections
- 4.6 Zusammenfassung
- Teil II Gestaltungsprinzipien und Entwurfsmuster
- 5 Programmieren mit Funktionsparametern
- 5.1 Höhere Funktionen für Collections
- 5.1.1 Höhere Funktionen bei persistenten Collections
- 5.2 Flexible Programmschnittstellen
- 5.3 Algorithmen
- 5.3.1 Tiefensuche
- 5.3.2 Verallgemeinerung der Suche
- 5.4 Entwurfsmuster
- 5.4.1 Strategie
- 5.4.2 Kommando
- 5.5 Eingebettete und bedingte Ausführung
- 5.5.1 Eingebetteter Code
- 5.5.2 Bedingte Ausführung
- 5.6 Auswertung nach Bedarf
- 5.6.1 Faule Iteratoren
- 5.6.2 Unendliche Folgen
- 5.6.3 Faule Iteration über die Knoten eines Graphen
- 5.7 Zusammenfassung
- 6 Reduktion mit Monoiden
- 6.1 Monoide
- 6.2 Reduktion
- 6.3 Monoide in Java
- 6.4 Reduzierbare Strukturen
- 6.4.1 Reducible
- 6.4.2 Abgeleitete Operationen
- 6.5 Heben von Monoiden auf Container-Strukturen
- 6.5.1 Reduktion von Optional-Werten
- 6.5.2 Reduktion von Map-Einträgen
- 6.6 Parallele Reduktion
- 6.7 Zusammenfassung
- 7 Funktionsketten mit Monaden
- 7.1 Flüssige Schnittstellen
- 7.2 Funktoren
- 7.2.1 Funktor Optional
- 7.2.2 Gesetze und Eigenschaften
- 7.3 Monaden
- 7.3.1 Monade Optional
- 7.3.2 Gesetze
- 7.3.3 Bedeutung von Monaden
- 7.3.4 MonadPlus: Monade mit monoider Kombination
- 7.4 Zusammenfassung
- 8 Funktionskomposition
- 8.1 Funktionskomposition bei funktionalen Interfaces
- 8.1.1 Funktionskomposition mit Function
- 8.1.2 Logische Verknüpfungen bei Predicate
- 8.1.3 Bilden von Vergleichsketten mit Comparator
- 8.2 Generatoren für Zufallswerte
- 8.2.1 Monade Gen&A&
- 8.2.2 Erzeugen von Generatoren mit map
- 8.2.3 Generatoren für Listen und Wörter
- 8.2.4 Unendliche Iteratoren für Zufallswerte
- 8.3 Kombinator-Parser
- 8.3.1 Parser und Parser-Ergebnisse
- 8.3.2 Monade Parser
- 8.3.3 Kombinationsoperatoren
- 8.3.4 Parser für arithmetische Ausdrücke
- 8.4 Zusammenfassung
- Teil III Funktionale Systeme und Bibliotheken
- 9 Streams
- 9.1 Grundlagen von Streams
- 9.1.1 Ein erstes Beispiel
- 9.1.2 Externe vs. interne Iteration
- 9.1.3 Bedarfsauswertung
- 9.2 Klassen von Streams
- 9.3 Stream-Operationen
- 9.3.1 Erzeugeroperationen
- 9.3.2 Zwischenoperationen
- 9.3.3 Terminaloperationen
- 9.4 Collectors
- 9.4.1 Interface Collector
- 9.4.2 Vordefinierte Collectors
- 9.4.3 Downstream Collectors
- 9.4.4 Eine eigene Collector-Implementierung
- 9.5 Anwendungsbeispiele
- 9.5.1 Ergebnisauswertung mit Streams
- 9.5.2 Wortindex zu einem Text
- 9.6 Hinweise
- 9.6.1 Einmal-Iteration
- 9.6.2 Begrenzung von unendlichen Streams
- 9.6.3 Zustandslose und zustandsbehaftete Operationen
- 9.6.4 Reihenfolge von Operationen
- 9.6.5 Kombinationen von Operationen
- 9.7 Interne Implementierung
- 9.7.1 Beispiel
- 9.8 Zusammenfassung
- 10 Parallele Streams
- 10.1 Erzeugen von parallelen Streams
- 10.2 Parallele Ausführung
- 10.2.1 Spliterators
- 10.2.2 Ausführung mit Fork/Join-Framework
- 10.3 Bedingungen bei paralleler Ausführung
- 10.3.1 Parallele Ausführung und Seiteneffekte
- 10.3.2 Eigenschaften der Parameter von reduce
- 10.3.3 Paralleles Sammeln
- 10.4 Laufzeit
- 10.5 Zusammenfassung
- 11 Asynchrone Funktionsketten
- 11.1 Asynchrone Lösung mit Futures
- 11.2 CompletableFuture
- 11.3 Kombination von CompletableFutures
- 11.4 Beispiel Flugsuche
- 11.5 Zusammenfassung
- 12 Reaktive Streams
- 12.1 Grundlagen
- 12.1.1 Kontrakt von Observable
- 12.1.2 Erzeugen von Observables
- 12.1.3 Anmelden und Abmelden von Observer
- 12.2 Varianten
- 12.2.1 Single
- 12.2.2 Completable
- 12.2.3 Maybe
- 12.3 Hot und Cold Observables
- 12.3.1 ConnectableObservable
- 12.3.2 Beispiel Echtzeitdaten
- 12.4 Operationen
- 12.4.1 Abbildungen
- 12.4.2 Filtern und Teilmengen
- 12.4.3 Reduktion und Suche
- 12.4.4 Sammeln
- 12.4.5 Operationen mit Zeit
- 12.4.6 Kombinationen
- 12.4.7 Konvertierungen
- 12.4.8 Seiteneffekte
- 12.5 Asynchrone Ausführung
- 12.5.1 Serialisierung von nebenläufigen Ereignissen
- 12.5.2 subscribeOn und Scheduler
- 12.5.3 observeOn
- 12.6 Fehlerbehandlung
- 12.6.1 Fehlerereignisse auslösen
- 12.6.2 Auf Fehler reagieren
- 12.7 Rückstau und Flusskontrolle
- 12.7.1 Reduktion der Menge der Ereignisse
- 12.7.2 Flowables
- 12.8 Testen reaktiver Streams
- 12.9 Zusammenfassung
- 13 Testen mit und von Funktionen
- 13.1 Funktionsparameter bei JUnit 5
- 13.2 AssertJ: Eine DSL für Unit-Tests
- 13.3 Eigenschaftsbasiertes Testen nach QuickCheck
- 13.3.1 Tests
- 13.3.2 Shrinken der Werte
- 13.4 Zusammenfassung
- Teil IV Funktionale Programmierung in Kotlin
- 14 Einführung in die Sprache Kotlin
- 14.1 Dateien, Packages und Deklarationen
- 14.2 Basisdatentypen und Arrays
- 14.3 Funktionen
- 14.4 Variablen, Ausdrücke und Kontrollstrukturen
- 14.4.1 Variablen
- 14.4.2 Kontrollstrukturen
- 14.5 Klassen, Interfaces und Objekte
- 14.5.1 Klassen
- 14.5.2 Interfaces
- 14.5.3 Objekte
- 14.5.4 Companion-Objekte
- 14.5.5 Spezielle Arten von Klassen
- 14.6 Das Typsystem von Kotlin
- 14.6.1 Verband der Typen und Typinferenz
- 14.6.2 Nullable- und Non-Nullable-Typen
- 14.6.3 Typtest und Typecasts
- 14.7 Generics
- 14.7.1 Typparameter
- 14.7.2 Typconstraints
- 14.7.3 Ko- und Kontravarianz
- 14.7.4 Star-Projektion
- 14.7.5 Reifizierte Typparameter
- 14.8 Erweiterungsfunktionen und Erweiterungsproperties
- 14.9 Delegates
- 14.9.1 Property-Delegates
- 14.9.2 Klassen-Delegates
- 14.10 Zusammenfassung
- 15 Funktionale Datenstrukturen in Kotlin
- 15.1 Datenklassen
- 15.2 Paare und Tripel
- 15.3 Algebraische Datentypen mit Datenklassen
- 15.4 Pattern Matching
- 15.5 Funktionale Liste in Kotlin
- 15.6 Collections in Kotlin
- 15.7 Zusammenfassung
- 16 Lambda-Ausdrücke und höhere Funktionen
- 16.1 Formen von Lambda-Ausdrücken
- 16.2 Funktionsreferenzen und anonyme Funktionen
- 16.3 Closures
- 16.4 Inlining Lambda-Ausdrücke
- 16.5 Java-Interoperabilität und SAM-Interfaces
- 16.6 Höhere Funktionen für FList
- 16.7 Zusammenfassung
- 17 Höhere Funktionen für Collections
- 17.1 Einführung
- 17.2 Abbilden, Filtern, Sortieren, Teilmengen
- 17.3 Reduktion
- 17.4 Suche und Quantoren
- 17.5 Bilden von Maps
- 17.6 Gruppieren und Aufteilen
- 17.7 Weitere Operationen
- 17.8 Sequences
- 17.9 Zusammenfassung
- 18 Lambda-Ausdrücke mit Empfänger
- 18.1 Grundlagen
- 18.2 Varianten und Kombinationen
- 18.3 Scope-Funktionen
- 18.4 Hierarchische Builder
- 18.4.1 Ein Builder für Trees
- 18.4.2 Ein Builder für hierarchische Dokumente
- 18.5 Zusammenfassung
- 19 Domänenspezifische Sprachen
- 19.1 Fallbeispiel physikalische Einheiten
- 19.2 Fallbeispiel Parser-DSL
- 19.2.1 Parser und Result
- 19.2.2 Funktionen und Kombinationsoperatoren
- 19.2.3 DSL für Parser-Spezifikationen
- 19.3 Fallbeispiel Zustandsmaschinen
- 19.4 Zusammenfassung
- 20 Gestaltung von Systemen und Frameworks
- 20.1 Koroutinen
- 20.1.1 Suspend-Funktionen und Koroutinen
- 20.1.2 Strukturierte Nebenläufigkeit
- 20.2 Flows
- 20.3 Jetpack Compose
- 20.4 Ktor
- 20.5 Zusammenfassung
- A Bibliografie
- B Laufzeitexperimente Parallele Streams
- B.1 Experimentelle Anordnungen
- B.2 Experimente
- Fußnoten
- Index
- Über den Autor
System requirements
File format: PDF
Copy protection: Watermark-DRM (Digital Rights Management)
System requirements:
- Computer (Windows; MacOS X; Linux): Use the free software Adobe Reader, Adobe Digital Editions, or any other PDF viewer of your choice (see eBook Help).
- Tablet/Smartphone (Android; iOS): Install the free app Adobe Digital Editions or another reading app for eBooks, e.g., PocketBook (see eBook Help).
- E-reader: Bookeen, Kobo, Pocketbook, Sony, Tolino and many more (only limited: Kindle).
The file format PDF always displays a book page identically on any hardware. This makes PDF suitable for complex layouts such as those used in textbooks and reference books (images, tables, columns, footnotes). Unfortunately, on the small screens of e-readers or smartphones, PDFs are rather annoying, requiring too much scrolling.
This eBook uses Watermark-DRM, a „soft” copy protection. This means that there are no technical restrictions to prevent illegal distribution. However, there is a personalised watermark embedded in the eBook that can be used to identify the purchaser of the eBook in the event of misuse and to provide evidence for legal purposes.
For more information, see our eBook Help page.