Möchten Sie sauberen, wartbaren und eleganten Code schreiben? Dann lernen Sie das Paradigma der funktionalen Programmierung kennen! Tauchen Sie in eine neue Denkweise ein und schreiben Sie eleganten Code auf die funktionale Art. Code, der sich in Ihren Anwendungen nutzen lässt, auch wenn Sie objektorientiert erstellt sind. Es kommt nicht darauf an, in welcher Programmiersprache Sie schreiben. Die meisten Codebeispiele in diesem Buch sind in leicht verständlichem Scala formuliert und außerdem in Python übersetzt. Der Autor geht außerdem auf sprachabhängige Aspekte ein und zeigt dazu auch Codebeispiele in Java, JavaScript und C#. Für Python-Liebhaber gibt es in der deutschen Ausgabe ein Special mit Python-Codebeispielen und zusätzlichen Tipps, um das Buch ganz im "Python-Modus" lesen zu können.
Aus dem Inhalt:
- Die Denkweise kennenlernen
- Ein paar einfache mathematische Grundlagen
- Entwurfsmuster
- Datenstrukturen
- Unveränderlichkeit
- Nebenläufigkeit
- Kombination mit OOP
- Besonderheiten verschiedener Programmiersprachen
- Python-Special
Inhaltsverzeichnis
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. 7 . . . Fazit . . . 26 2. Mathematische Grundlagen . . . 27 2. 1 . . . Mengenlehre . . . 27 2. 2 . . . Grundlagen der Informatik . . . 32 2. 3 . . . Fazit . . . 34 3. Kategorientheorie und Entwurfsmuster . . . 35 3. 1 . . . Kategorientheorie und Funktionsmuster . . . 37 3. 2 . . . Funktionsmuster . . . 51 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. 7 . . . Fazit . . . 75 5. Unveränderlichkeit im Detail . . . 77 5. 1 . . . Veränderliche und unveränderliche Variablen . . . 77 5. 2 . . . Rekursion . . . 78 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. 7 . . . Fazit . . . 101 6. Nebenläufigkeit . . . 103 6. 1 . . . Streams . . . 107 6. 2 . . . Akka-Streams . . . 108 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. 2 . . . Fazit . . . 128 Anhang . . . 129 A . . . Scala . . . 129 B . . . Python-Special . . . 151 Index . . . 183