Skip to content

Cover

Ü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:

bash
$ 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:

bash
$ npm run ch04

Download

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

Bei vorhandener .nvmrc-Datei genügt:

// being anywhere inside this project
nvm install
node -v // will show v10.22.1

Kommandoablauf

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-epub

Hinweis: Für Ebook-Generierung wird ebook-convert benö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.

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