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, 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 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.