Callback je funkce, která je předána jako argument jiné funkci a je vykonána později, obvykle po dokončení určité operace nebo při vzniku konkrétní události. Callbacky jsou důležitou součástí Asynchronous Programming a Event-Driven Programming.
Používají se zejména v jazyce JavaScript: Kompletní monografie od A do Z, ale lze se s nimi setkat i v mnoha dalších programovacích jazycích.
Namísto okamžitého vykonání funkce je funkce předána jiné části programu, která ji zavolá ve vhodný okamžik.
Funkce A ↓ Předá Callback ↓ Proběhne operace ↓ Callback je spuštěn
function pozdrav() { console.log("Ahoj!"); } function provedAkci(callback) { callback(); } provedAkci(pozdrav);
Výstup:
Ahoj!
Funkce pozdrav() je předána jako callback a vykonána uvnitř funkce provedAkci().
Velmi často se používají anonymní funkce:
setTimeout(function() { console.log("Čas vypršel."); }, 1000);
Po uplynutí jedné sekundy je callback automaticky spuštěn.
Callbacky jsou běžnou součástí práce s událostmi.
button.addEventListener("click", function() { console.log("Kliknutí."); });
Anonymní funkce zde představuje callback, který se spustí při události click.
Při načítání dat nebo práci se soubory se callback vykoná až po dokončení operace.
Příklad:
nactiData(function(data) { console.log(data); });
Program mezitím může pokračovat v dalších činnostech.
Při větším počtu vnořených callbacků může vzniknout problém známý jako Callback Hell.
Příklad:
akce1(function() { akce2(function() { akce3(function() { akce4(function() { }); }); }); });
Takový kód je obtížně čitelný a složitě se udržuje.
V moderním JavaScriptu se callbacky často nahrazují pomocí:
Příklad s Promise:
fetch("/data") .then(response => response.json()) .then(data => console.log(data));
Jednoduchý princip. Podpora asynchronních operací. Efektivní práce s událostmi. Nízké nároky na výkon.
Při větším množství callbacků vzniká nepřehledný kód. Obtížnější ladění chyb. Horší čitelnost u složitějších aplikací.
Zpracování událostí. Síťová komunikace. Časovače. Práce se soubory. API požadavky. Animace. Asynchronní operace.
Event Event Handler Event Loop event listener Asynchronous Programming promise async await JavaScript: Kompletní monografie od A do Z Node.js
Callback je funkce předaná jiné funkci za účelem jejího pozdějšího vykonání. Callbacky tvoří základ práce s událostmi a asynchronními operacemi v JavaScriptu i dalších programovacích jazycích. Přestože jsou stále široce používány, u složitějších aplikací jsou často nahrazovány technologiemi Promise a Async/Await, které nabízejí přehlednější zápis kódu.