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