Callback
Geri çağırma fonksiyonu
- Okunuşu
- kolbek
Kısaca
Callback, başka bir fonksiyona argüman olarak verilen ve o fonksiyonun bir iş bittiğinde ya da bir olay gerçekleştiğinde sonradan çağırdığı fonksiyondur.
Callback nedir?
Callback, başka bir fonksiyona verdiğiniz ve doğru anda 'geri çağrılabilen' bir fonksiyondur. Onu alan fonksiyon ne zaman çalıştıracağına karar verir: hemen, bir iş bittikten sonra ya da bir olay her gerçekleştiğinde. JavaScript gibi dillerde bu mümkündür, çünkü fonksiyonlar diğer değerler gibi taşınabilir.
Kalabalık bir restoranda telefon numaranızı bırakmak callback için iyi bir benzetmedir. Kapıda beklemek yerine gününüze devam edersiniz, masanız hazır olduğunda da sizi geri ararlar. Kodda callback'ler tam olarak böyle kullanılır: düğme tıklamalarına yanıt vermek, bir dosyayı okumanın sonucunu işlemek ya da array.map(callback) örneğindeki gibi davranışı özelleştirmek için.
Callback'ler senkron ya da asenkron olabilir. Senkron callback, forEach veya map örneklerinde olduğu gibi çağrı sırasında hemen çalışır. Asenkron callback ise bir zamanlayıcı, ağ isteği ya da dosya okuma gibi bir işlem tamamlandıktan sonra çalışır.
Birçok iç içe asenkron callback'e güvenmek, derin girintili ve okuması zor, 'callback hell' olarak bilinen bir koda yol açabilir. Promise'lar ve async/await, JavaScript'e büyük ölçüde bunu çözmek için eklendi; ancak callback'ler, özellikle olay dinleyicilerinde ve dizi metotlarında hâlâ her yerde.
Bir bakışta
Önemli noktalar
- Callback, daha sonra çalıştırılmak üzere başka bir fonksiyona verilen fonksiyondur.
- Callback'in ne zaman ve kaç kez çalışacağını onu alan fonksiyon belirler.
- Callback'ler senkron (
mapgibi) ya da asenkron (setTimeoutgibi) olabilir. - Derin iç içe asenkron callback'ler 'callback hell' yaratır; promise'lar ve async/await bunu önlemeye yardımcı olur.
Örnek
// Synchronous callback: runs once for each item, right away
const prices = [10, 20, 30];
const withTax = prices.map((price) => price * 1.2);
// Asynchronous callback: runs later, after 1 second
setTimeout(() => {
console.log("One second has passed");
}, 1000);
// Event callback: runs every time the button is clicked
button.addEventListener("click", () => console.log("Clicked!"));Sık sorulan sorular
Callback ile promise arasındaki fark nedir?
Callback, iş bittiğinde çağrılsın diye verdiğiniz bir fonksiyondur. Promise ise o işin gelecekteki sonucunu temsil eden bir nesnedir; .then() ile zincirleyebilir ya da await ile bekleyebilirsiniz. Promise'lar, iç içe callback'lere göre sıralamayı ve hata yönetimini çok daha basit hâle getirir.
Callback hell nedir?
Callback hell, birçok asenkron callback'in birbirinin içine yerleştirilerek okunması, hata ayıklaması ve hataların yönetilmesi zor bir piramit biçimi oluşturduğu koddur. Genellikle promise'lara ya da async/await'e geçilerek çözülür.
Callback'ler her zaman asenkron mudur?
Hayır. map, filter ve forEach gibi dizi metotlarına verilen callback'ler senkron çalışır, yani çağrı sırasında hemen yürütülür. Yalnızca zamanlayıcılara, olaylara veya girdi/çıktı işlemlerine bağlı callback'ler asenkron çalışır.
Sık karşılaştırılanlar
İlgili sayfalar
- FonksiyonProgramlamanın Temelleri, s. 20Fonksiyon, belirli bir işi yapan, isteğe bağlı olarak parametre denen girdiler alıp sonuç döndürebilen, adlandırılmış ve yeniden kullanılabilir kod bloğudur.
- PromiseProgramlamanın Temelleri, s. 46Promise, asenkron bir işlemin nihai sonucunu temsil eden bir nesnedir; iş bittiğinde kodun başarıya ya da hataya tepki vermesini sağlar.
- Async/AwaitProgramlamanın Temelleri, s. 2Async/await, asenkron kodu sıradan adım adım kod gibi okunur biçimde yazmayı sağlayan, her await'te bir promise ya da görev bitene dek duran sözdizimidir.
- ClosureProgramlamanın Temelleri, s. 6Closure, oluşturulduğu kapsamdaki değişkenleri hatırlayan bir fonksiyondur; dıştaki fonksiyon sona erdikten sonra bile bu değişkenleri kullanabilir.
- JavaScriptWeb Geliştirme, s. 25JavaScript, web tarayıcılarında sayfaları etkileşimli hale getiren ve Node.js gibi çalışma ortamlarıyla sunucularda da çalışan programlama dilidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin