Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Vorwort
9
1 Was ist funktionale Programmierung?
11
1.1 Unveränderlichkeit
13
1.2 Referenzielle Transparenz
16
1.3 Funktionen höherer Ordnung
18
1.4 Lazy Evaluation
19
1.5 Funktionale Denkweise
21
1.6 Die Vorteile der funktionalen Programmierung
22
1.6.1 Funktionale Programmierung kann die Produktivität steigern
23
1.6.2 Funktionale Programmierung macht Spaß!
24
1.6.3 Scala
25
1.7 Fazit
26
2 Mathematische Grundlagen
27
2.1 Mengenlehre
27
2.1.1 Funktionen
28
2.1.2 Funktionstypen
30
2.2 Grundlagen der Informatik
32
2.2.1 Anonyme Funktionen
32
2.2.2 Funktionen als First-Class-Objekte
33
2.3 Fazit
34
3 Kategorientheorie und Entwurfsmuster
35
3.1 Kategorientheorie und Funktionsmuster
37
3.1.1 Ein kurzer Abriss
38
3.1.2 Objekte und Morphismen
39
3.1.3 Ein Beispiel für eine Kategorie
40
3.1.4 Die Scal-Kategorie
44
3.1.5 Funktoren
45
3.1.6 Funktoren in der Programmierung
49
3.2 Funktionsmuster
51
3.2.1 Das Funktor-Muster
51
3.2.2 Monoide
53
3.2.3 Natürliche Transformationen
55
3.2.4 Monaden
57
3.3 Fazit
60
4 Funktionale Datenstrukturen
61
4.1 Die Option-Datenstruktur
62
4.2 Die Try-Datenstruktur
67
4.3 Die Either-Datenstruktur
68
4.4 Funktionen höherer Ordnung
70
4.5 Monaden und Scala-Abstraktionen
72
4.6 Traditionelle Datenstrukturen
74
4.6.1 Unveränderlichkeit und Historie
74
4.6.2 Trägheit
75
4.7 Fazit
75
5 Unveränderlichkeit im Detail
77
5.1 Veränderliche und unveränderliche Variablen
77
5.2 Rekursion
78
5.2.1 Ein Beispiel für eine verkettete Liste
79
5.3 Endrekursion
86
5.4 Weitere Beispiele für die Leistungsfähigkeit der fold-Funktion in Scala
91
5.5 Verbindung zwischen »fold« und Monoiden
92
5.6 Vertiefende Informationen zu Funktionen höherer Ordnung
96
5.6.1 Von »map« zu »flatMap«
98
5.7 Fazit
101
6 Nebenläufigkeit
103
6.1 Streams
107
6.2 Akka-Streams
108
6.2.1 Quelle
108
6.2.2 Fluss
109
6.2.3 Senke
110
6.3 Weitere Informationen zu Streams
111
6.4 FS2: funktionale Streams für Scala
112
6.5 Fazit
114
7 Wie geht es weiter?
115
7.1 Den reinen Weg einschlagen
115
7.1.1 Die IO-Monade
117
7.1.2 Den Mittelweg beschreiten
120
7.1.3 JVM-Sprachen
120
7.1.4 .NET-Sprachen
121
7.1.5 Typklassen
121
7.2 Fazit
128
Anhang
129
A Scala
129
A.1 Annahmen
130
A.2 Überblick
130
A.3 »var« und »val«
132
A.4 Klassen und Objekte
132
A.5 Funktionen
133
A.6 Case-Klassen
134
A.7 Fazit
149
B Python-Special
151
B.1 Interne und externe Bibliotheken
152
B.2 Typsicherheit
153
B.3 Sprachelemente
155
B.4 Codebeispiele zu Kapitel 1, »Was ist funktionale Programmierung?«
160
B.5 Codebeispiele zu Kapitel 3, »Kategorientheorie und Entwurfsmuster«
161
B.6 Codebeispiele zu Kapitel 4, »Funktionale Datenstrukturen«
167
B.7 Codebeispiele zu Kapitel 5, »Unveränderlichkeit im Detail«
173
B.8 Codebeispiele zu Kapitel 6, »Nebenläufigkeit«
176
B.9 IO-Monaden
179
B.10 Wie geht’s weiter?
180
Index
183