Obsah

Callback

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.

Jak Callback funguje

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 

Jednoduchý příklad

 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().

Anonymní Callback

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.

Callback a události

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.

Callback a asynchronní operace

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.

Callback Hell

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.

Moderní alternativa

V moderním JavaScriptu se callbacky často nahrazují pomocí:

promise async await

Příklad s Promise:

 fetch("/data") .then(response => response.json()) .then(data => console.log(data)); 

Výhody

Jednoduchý princip. Podpora asynchronních operací. Efektivní práce s událostmi. Nízké nároky na výkon.

Nevýhody

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

Oblasti použití

Zpracování událostí. Síťová komunikace. Časovače. Práce se soubory. API požadavky. Animace. Asynchronní operace.

Související pojmy

event event handler event loop event listener asynchronous programming promise async await javascript node.js

Shrnutí

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.