EMZETT.
Login

Callback

Kurz: Ein Callback ist eine Funktion, die einer anderen Funktion als Argument übergeben wird und später „zurückgerufen“ wird – etwa wenn ein Ereignis eintritt oder eine Aufgabe fertig ist.

Genauer: Callbacks ermöglichen, Verhalten flexibel einzusetzen: Der Aufrufer bestimmt, was passieren soll, die aufgerufene Funktion, wann. Sie sind das Fundament von Ereignisbehandlung (Klick-Handler), asynchroner Programmierung (Dateien lesen, Netzwerk) und Bibliotheken wie map, filter und sort mit eigener Vergleichsfunktion.

Im Detail

// Synchrones Callback: wird sofort aufgerufen
[3, 1, 2].sort((a, b) => a - b);
 
// Asynchrones Callback: wird später aufgerufen
setTimeout(() => console.log("nach 1 Sekunde"), 1000);
button.addEventListener("click", () => console.log("geklickt"));
 
// Eigene Funktion mit Callback
function lade(daten, fertig) {
  const ergebnis = daten.map((x) => x * 2);
  fertig(ergebnis);
}
lade([1, 2, 3], (r) => console.log(r));   // [2, 4, 6]
def fuer_jeden(liste, aktion):
    for element in liste:
        aktion(element)
 
fuer_jeden(["a", "b"], print)
fuer_jeden([1, 2], lambda x: print(x * 10))

Callback-Hölle und Alternativen

Wer mehrere asynchrone Schritte hintereinander braucht, verschachtelt Callbacks tief (callback hell, „Pyramid of Doom“) und der Ablauf wird schwer lesbar. Moderne Sprachen bieten Abhilfe: Promises/Futures und async/await in JavaScript, Python, C#, Kotlin und Rust lesen sich wie normaler, sequenzieller Code. Fehlerbehandlung per Callback (erster Parameter = Fehler) wird dort durch try/catch ersetzt.

Verwandte Konzepte

  • Lambda-Ausdrücke sind die kurze Schreibweise für Callbacks.
  • Closures erlauben dem Callback, auf Daten seiner Umgebung zuzugreifen.
  • Beim Observer-Muster (Beobachter) registrieren sich viele Callbacks für dasselbe Ereignis.

Siehe auch: Higher-Order-Funktion, async/await, Event Loop, Lambda-Ausdruck