Gängige Dateiformate
Programmierrichtlinien
Wie schlagen sich die Script- und Programmiersprachen im Vergleich?
C#
JavaScript & TypeScript (mit node.js)
Welche Entwicklungsumgebung (IDE) ist die Beste?

Funktionale Programmierung

Einfach erklärt: Funktionale Programmierung

Funktionale Programmierung ist ein sehr simples Konzept. Es ist so einfach wie einen Lichtschalter in deinem Zimmer zu verstehen. Wenn du den Lichtschalter betätigst, geht das Licht an. Und jeder Lichtschalter in deiner Wohnung hat die gleiche Funktion: Das Licht geht an. Diese Denkweise ist das Grundprinzip der funktionalen Programmierung. Ziemlich simpel, oder? : )


Was ist funktionale Programmierung?

Funktionale Programmierung ist eine Art, Software zu schreiben, bei der alles um Funktionen (Mathematik lässt grüßen) aufgebaut ist. Im Gegensatz zu anderen Programmieransätzen, bei denen du „Schritt für Schritt“-Anweisungen gibst, wie bei einer Anleitung, sagt dir die funktionale Programmierung: Nutze Funktionen, um dir ein Ergebnis berechnen zu lassen.

Eine Funktion ist dabei wie ein kleiner Werkzeugkasten, das Eingabe(n) erhält, etwas damit macht und dann nur das Ergebnis zurückgibt, ohne dabei die Umwelt drumherum zu beeinflussen.


Die Grundprinzipien der funktionalen Programmierung

Hier sind die wichtigsten Eigenschaften der funktionalen Programmierung:

  1. Keine Zustände, keine „Nebenwirkungen“:
    • In der funktionalen Programmierung gibt es keine „glücklichen Unfälle“. Eine Funktion ist wie eine mathematische Formel: Sie nimmt etwas, rechnet damit – und das war’s. Sie verändert keine Variablen oder Teile des Programms außerhalb von sich selbst.
    • Beispiel: Eine Funktion, die 2 plus 3 rechnet, sagt nur: „Die Antwort ist 5.“ Sie speichert diese 5 nirgendwo ab.
  2. Funktionen wie in der Mathematik:
    • Jede Funktion hat Eingaben (Argumente) und gibt genau eine Ausgabe zurück.
    • Immer die gleichen Eingaben führen zu exakt denselben Ausgaben.
    • Beispiel: Die Funktion zur Verdopplung einer Zahl verdoppelt eine 2 immer zu 4 – egal wie oft sie aufgerufen wird.
  3. Unveränderliche Daten (Immutabilität):
    • In der funktionalen Programmierung wird nichts „im Hintergrund verändert“. Alles bleibt, wie es ist. Willst du etwas ändern, erstellst du einfach etwas Neues.
    • Beispiel: Wenn du in einer Liste Zahlen sortieren möchtest, bekommst du eine neue sortierte Liste zurück, aber das Original bleibt unverändert.
  4. Funktionen sind auch Daten:
    • In der funktionalen Programmierung kannst du Funktionen genauso behandeln wie Zahlen oder Texte. Du kannst sie einer anderen Funktion übergeben, sie als Rückgabewert nutzen oder sie in Variablen speichern.
  5. Funktionen können andere Funktionen aufrufen:
    • Funktionen können sogar andere Funktionen als Eingabe nehmen oder aus mehreren kleinen Funktionen bestehen, die zusammenarbeiten.

Warum funktionale Programmierung?

Die funktionale Programmierung ist deshalb so nützlich, weil sie dir hilft:

  • Vorhersehbar zu arbeiten: Da alles unveränderlich ist und Funktionen nur Ergebnisse zurückgeben, ist dein Programm leichter zu verstehen und zu kontrollieren.
  • Weniger Fehler zu machen: Es gibt keine „Nebenwirkungen“, bei denen das Programm plötzlich Daten verändert, die gar nicht geändert werden sollten.
  • Wiederverwendbare Bausteine zu schaffen: Du kannst gut geschriebene Funktionen immer wieder verwenden (wie Lego-Steine).
  • Mit parallelen Aufgaben umzugehen: Da Daten niemals verändert werden, können verschiedene Teile des Programms gleichzeitig sicher arbeiten, was besonders bei moderner Hardware gut ist.

Sprachen, die funktionale Programmierung unterstützen

Es gibt Programmiersprachen, die speziell für funktionale Programmierung entwickelt wurden:

  1. Haskell: Eine rein funktionale Sprache, die ausschließlich mit den Prinzipien der funktionalen Programmierung arbeitet.
  2. Erlang: Speziell entwickelt für paralleles Arbeiten, oft für Telefonnetzwerke genutzt.
  3. Clojure: Eine funktionale Sprache auf Basis von Java, die sich auf unveränderliche Datenstrukturen fokussiert.
  4. F#: Eine Sprache, die häufig für mathematische und logische Anwendungen genutzt wird.

Auch andere Sprachen wie Python, JavaScript oder Scala unterstützen funktionale Programmierung, erlauben aber auch andere Programmierstile, wie z. B. objektorientierte oder prozedurale Programmierung.


Funktionale Programmierung in einfachen Beispielen

Zur Veranschaulichung nutzen wir Python, eine Sprache, die die funktionale Programmierung unterstützt, aber nicht ausschließlich funktional ist.


Beispiel 1: Verdopplung einer Zahl


# Eine einfache Funktion zur Verdopplung einer Zahl
def verdoppeln(x):
return x * 2

# Die Funktion aufrufen
print(verdoppeln(5)) # Das ergibt 10

Hier ist die Funktion verdoppeln eine reine Funktion: Sie nimmt die Eingabe 5 und gibt als Ergebnis 10 zurück. Es gibt keine Nebenwirkungen – sie verändert nichts außerhalb von sich selbst.


Beispiel 2: Arbeiten mit einer Liste – Funktional statt imperativ

Nehmen wir an, du hast eine Liste mit Zahlen und möchtest diese verdoppeln. In der funktionalen Programmierung machst du das mit sogenannten Mapping-Funktionen:


# Liste mit Zahlen
zahlen = [1, 2, 3, 4, 5]

# Funktion zur Verdopplung
def verdoppeln(x):
return x * 2

# map() wendet die Funktion auf jede Zahl in der Liste an
verdoppelte_zahlen = list(map(verdoppeln, zahlen)) # [2, 4, 6, 8, 10]

# Das Ergebnis anzeigen
print(verdoppelte_zahlen)

Was passiert hier?

  • map(verdoppeln, zahlen) nimmt jede Zahl aus der Liste zahlen, wendet die Funktion verdoppeln darauf an und erstellt eine neue Liste mit den Ergebnissen.
  • Die ursprüngliche Liste bleibt unverändert.

Beispiel 3: Filtern von Daten

Du möchtest nur die Zahlen aus einer Liste behalten, die gerade sind:


# Liste mit Zahlen
zahlen = [1, 2, 3, 4, 5, 6]

# Funktion, die überprüft, ob eine Zahl gerade ist
def ist_gerade(x):
return x % 2 == 0

# filter() entfernt alle Zahlen, die nicht gerade sind
gerade_zahlen = list(filter(ist_gerade, zahlen)) # [2, 4, 6]

# Das Ergebnis anzeigen
print(gerade_zahlen)

Was passiert hier?

  • Die Funktion ist_gerade überprüft, ob eine Zahl durch 2 teilbar ist.
  • filter(ist_gerade, zahlen) erstellt eine neue Liste, die nur gerade Zahlen enthält.

Beispiel 4: Funktionen, die andere Funktionen nutzen

Funktionen können in der funktionalen Programmierung auch andere Funktionen als Eingabe bekommen.


# Eine Funktion, die eine Funktion als Eingabe erhält
def anwenden_und_verdoppeln(funktion, x):
return funktion(x) * 2

# Eine einfache Funktion, die 3 addiert
def plus_drei(x):
return x + 3

# Die Funktion anwenden
ergebnis = anwenden_und_verdoppeln(plus_drei, 5) # (5 + 3) * 2 = 16
print(ergebnis)

Was passiert hier?

  • Die Funktion anwenden_und_verdoppeln nimmt zwei Parameter: eine Funktion (funktion) und eine Zahl (x).
  • funktion(x) wird zuerst ausgeführt, und das Ergebnis wird verdoppelt.
  • Hier wird plus_drei(x) verwendet, die zu jeder Zahl 3 addiert.

Zusammenfassung

Funktionale Programmierung ist ein einfacher und logischer Ansatz, Programme zu schreiben. Alles dreht sich um Funktionen, die:

  • Immer vorhersehbare Ergebnisse liefern (keine zufälligen oder versteckten Änderungen!).
  • Daten nicht verändern, sondern neue Daten erzeugen.
  • Hilft, Programme übersichtlicher und weniger fehleranfällig zu machen.

Essenzielles zur funktionalen Programmierung:

  1. Baue dein Programm mit kleinen Funktionen, die eine jeweilige Aufgabe erfüllen.
  2. Denk in mathematischen Prinzipien: die gleichen Eingaben führen zu den gleichen Ergebnissen.
  3. Konzentriere dich darauf, Ergebnisse zu berechnen, ohne bestehende Daten zu verändern.

Ein gutes Verständnis von funktionaler Programmierung öffnet dir die Tür zu einer effizienteren und saubereren Art zu programmieren, besonders wenn du mit großen Datenmengen oder parallelen Aufgaben arbeitest!