Über dieses Buch
Dieses Buch behandelt das funktionale Programmierparadigma im Allgemeinen. Wir verwenden dabei die weltweit beliebteste funktionale Programmiersprache: JavaScript. Manche mögen dies für eine ungünstige Wahl halten, da es gegen den aktuellen vorherrschenden imperativen Programmierstil verstößt. Ich bin jedoch überzeugt, dass JavaScript aus folgenden Gründen der beste Weg zum Erlernen von FP ist:
- Sie verwenden es wahrscheinlich täglich beruflich.
Dadurch können Sie das erworbene Wissen direkt an realen Projekten anwenden, anstatt nur Nebenprojekten in obskuren FP-Sprachen nach Feierabend zu üben.
- Wir müssen nicht alles vorher lernen, um Programme zu schreiben
In rein funktionalen Sprachen sind selbst einfache Operationen wie Variablenausgaben oder DOM-Zugriffe nur über Monaden möglich. Hier können wir während des Lernprozesses pragmatisch vorgehen. Zudem ermöglicht JavaScripts Multiparadigmen-Natur ein schrittweises Umstellen des Code-Stils, während man bei Wissenslücken auf vertraute imperativen Muster zurückgreifen kann.
- JavaScript bietet alle Features für erstklassigen funktionalen Code.
Mit minimalen Bibliotheken lassen sich Konzepte aus Sprachen wie Scala oder Haskell nachbilden. Obwohl objektorientierte Programmierung aktuell dominiert, wirkt sie in JavaScript oft unnatürlich: Permanentes bind zur this-Kontrolle, Workarounds für vergessenes new, private Eigenschaften nur über Closures zugänglich - für viele von uns fühlt sich FP hier natürlicher an.
Typisierte funktionale Sprachen bleiben zwar unbestritten die optimale Wahl für diesen Programmierstil, doch JavaScript dient hier als Lernplattform. Die erlernten mathematischen Interfaces sind universell übertragbar - ob in Swiftz, Scalaz, Haskell oder PureScript werden Sie sich schnell zurechtfinden.
Online lesen
Für optimale Lesbarkeit online über Gitbook lesen.
- Schnellzugriffs-Sidebar
- Browserbasierte Übungen
- Detaillierte Beispiele
Experimentieren Sie mit dem Code
Um den Lernerfolg zu maximieren: Experimentieren Sie aktiv mit den Konzepten. Manche sind anfangs kontraintuitiv und werden erst durch praktische Anwendung verständlich. Alle im Buch verwendeten Funktionen und algebraischen Datenstrukturen finden sich im Anhang. Der Code ist auch als npm-Modul verfügbar:
$ npm i @mostly-adequate/supportÜbungen sind direkt im Editor ausführbar: Vervollständigen Sie z.B. exercise_*.js in exercises/ch04 und führen Sie aus:
$ npm run ch04Download
Vorgefertigte PDF und EPUB als Build-Artefakte des letzten Releases.
Selbst generieren
⚠️ Die Projektkonfiguration ist etwas veraltet. Bei lokaler Generierung empfehlen wir Node v10.22.1 und die neueste Calibre-Version.
Hinweis zur Node.js-Version
Da die empfohlene Node-Version (v10.22.1) älter ist, verwenden Sie am besten nvm für die Installation mehrerer Versionen:
- Benötigte Node-Version installieren:
nvm install 10.22.1
nvm install 20.2.0- Versionen wechseln:
nvm use 10.22.1
node -v // will show v10.22.1
nvm use 20.2.0
node -v // will show v20.2.0Bei vorhandener .nvmrc-Datei genügt:
// being anywhere inside this project
nvm install
node -v // will show v10.22.1Kommandoablauf
Vollständige Befehlssequenz zur Eigen-Generierung (mit installiertem nvm):
git clone https://github.com/MostlyAdequate/mostly-adequate-guide.git
cd mostly-adequate-guide/
nvm install
npm install
npm run setup
npm run generate-pdf
npm run generate-epubHinweis: Für Ebook-Generierung wird
ebook-convertbenötigt. Installationsanleitung.
Inhaltsverzeichnis
Siehe SUMMARY.md
Mitwirken
Siehe CONTRIBUTING.md
Übersetzungen
Siehe TRANSLATIONS.md
FAQ
Siehe FAQ.md
Zukunftspläne
- Teil 1 (Kapitel 1-7) behandelt Grundlagen. Aktuelle Version ist ein Erstentwurf - Fehlerkorrekturen willkommen!
- Teil 2 (Kapitel 8-13) vertieft Typklassen wie Funktoren und Monaden bis hin zu Traversables. Geplant sind auch Transformatoren und pure Anwendungen.
- Teil 3 (Kapitel 14+) erkundet die Grenze zwischen Praxis und akademischen Konzepten: Komonaden, F-Algebren, freie Monaden, Yoneda-Lemma und weitere kategorientheoretische Konstrukte.

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
