Ein Seiteneffekt (englisch Side Effect) ist jede Wirkung einer Funktion, die nicht über ihren Rückgabewert sichtbar wird. Alles, was eine Funktion außerhalb ihres eigenen Bereichs verändert — Bildschirmausgabe, Datei- oder Datenbankzugriffe, Änderungen an globalen Variablen oder das Mutieren übergebener Objekte — ist ein Seiteneffekt.

Beispiele

def addiere_element(daten, element):
    daten.append(element)  # Seiteneffekt: daten wird verändert
    return daten

print("Hallo")  # Seiteneffekt: Bildschirmausgabe

Die Funktion addiere_element liefert zwar einen Wert zurück, verändert aber nebenbei die übergebene Liste. Genau diese unsichtbare Wirkung erschwert das Verständnis und Testen von Code.

Pure Funktionen und referentielle Transparenz

Eine pure Funktion (reine Funktion) hat keine Seiteneffekte und liefert bei gleicher Eingabe immer dieselbe Ausgabe. Solche Funktionen sind referenziell transparent: Man kann einen Aufruf überall durch seinen Ergebniswert ersetzen, ohne das Programmverhalten zu ändern — wie bei 2 + 3, das durch 5 ersetzbar ist.

Warum reine Funktionen wertvoll sind

  • Einfach testbar: keine versteckte Abhängigkeit von globalem Zustand
  • Sicher zu zwischenspeichern (Memoization) und zu parallelisieren
  • Nebenläufige Ausführung ohne Race Conditions, weil kein gemeinsamer Zustand verändert wird
  • Vorhersagbares Verhalten beim Debugging

Diese Eigenschaften sind Kern der Funktionalen Programmierung und hängen eng mit Immutability zusammen: Unveränderliche Daten machen Seiteneffekte unmöglich.

Seiteneffekte lassen sich nicht vermeiden

Jedes nützliche Programm muss irgendwann Ausgaben erzeugen oder Zustand speichern. Die funktionale Praxis schiebt Seiteneffekte an die Ränder der Anwendung (Functional Core, Imperative Shell): Der innere Kern bleibt pur und testbar, die äußere Hülle übernimmt Ein- und Ausgabe. Auch React verlangt, dass Reducer pure Funktionen sind — Seiteneffekte gehören in Events oder Effekte. Verwandte Grundlagen: Higher-Order-Funktion, Closure, Thread-Sicherheit.