Einstieg in die Funktionale Programmierung

Online-Interpreter (mit Code-Beispielen): https://try.ocamlpro.com/

Üblicherweise sind wir es gewohnt, Programme und Algorithmen in prozeduraler bzw. objektorientierter Weise zu entwickeln. Instruktionen werden Schritt für Schritt von einer Von-Neumann-Maschine abgearbeitet und Variablen sind nichts anderes als Referenzen auf Register bzw. Speicherbereiche. Globale Variablen/Objekte stellen oftmals ein Risiko dar, vor allem dann, wenn Nebenläufigkeit im Spiel ist (Beispiel Race Conditions).

Alternativ dazu existiert die deklarativ-funktionale Programmierung, deren ausgezeichnete Parallelisierbarkeit Code konfliktfrei auf beliebig vielen Kernen bzw. Rechnern auszuführen ermöglicht. Nicht nur das: Schritt für Schritt haben populäre Programmiersprachen wie Java, C++, C#, PHP und Python wiederholt Konstrukte aus deren Umfeld übernommen. Begonnen hat dieser Siegeszug mit den Ausnahmen und der Rekursion, über die anonymen Funktionen (Lambdas), der Typinferenz (automatische Typerkennung) bis hin zum Musterabgleich (pattern matching). Eine Entwicklung, die auch jetzt noch zu keinem Ende gekommen ist, wie es Java beispielhaft vor Augen führt: Lambda-Funktionen sind ab Java 8 verfügbar, Typinferenz ist ab Java 10 möglich, Musterabgleich ab Java 21 in ausgereifter Form.

Zunächst vertiefen wir diesen Ansatz anhand der Programmiersprache Ocaml (http://www.ocaml.org/), welche dem*r Einsteiger*in etwas klarer gestaltete Konstrukte als Javascript oder Python anbietet. Abschließend ziehen wir den Vergleich zu anderen populären Sprachen, so dass jede*r für sich selber entscheidet, welche Umgebung er*sie wählt.