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