Asenkron Programlamaya Giriş
Callback'ler ve Zorlukları
function fetchData(url, callback) {
// Asenkron işlem başlat
setTimeout(() => {
callback(null, "Veri alındı!");
}, 2000);
}
fetchData("http://example.com", function(error, data) {
if (error) {
console.log("Hata:", error);
} else {
console.log(data);
}
});
Bu örnekte, `fetchData` fonksiyonu veriyi almak için bir URL'ye istek yapar. Ancak, callback fonksiyonu içerisinde başka işlemler de olabilir. Eğer birden fazla işlem yapılacaksa, callback’ler iç içe girecek ve kodun anlaşılmasını zorlaştıracaktır. Callback hell'i önlemek için genellikle daha modern yöntemler tercih edilir.
Promises: Callback Hell’i Önlemek
function fetchData(url) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Veri alındı!");
}, 2000);
});
}
fetchData("http://example.com")
.then(data => {
console.log(data);
})
.catch(error => {
console.log("Hata:", error);
});
Burada, `fetchData` fonksiyonu bir Promise döndürür. Eğer işlem başarılı olursa, `.then()` metodu çağrılır; bir hata oluşursa, `.catch()` metodu çalıştırılır. Promise'ler, callback hell sorununu ortadan kaldırarak, işlemlerin sıralı ve anlaşılır bir şekilde yazılmasına olanak tanır.
Async/Await ile Modern Asenkron Kodlama
async function fetchData(url) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Veri alındı!");
}, 2000);
});
}
async function getData() {
try {
const data = await fetchData("http://example.com");
console.log(data);
} catch (error) {
console.log("Hata:", error);
}
}
getData();
Gördüğünüz gibi, Async/Await ile daha temiz, okunabilir ve senkron benzeri bir yazım tarzı elde ediyoruz. Bu, büyük projelerde oldukça faydalıdır çünkü kodunuzun daha yönetilebilir olmasını sağlar.
Performans Karşılaştırması
- Callback’ler: Callback’ler genellikle en hızlı olanıdır çünkü doğrudan çalıştırılır, ancak okuma ve hata yönetimi açısından sorunlara yol açabilir.
- Promise’ler: Promise’ler de hızlıdır, ancak callback’lere göre daha esneklik sunar. Yine de büyük zincirlerde biraz daha karmaşık hale gelebilirler.
- Async/Await: Async/Await, Promise’lerin daha sade bir yazım şeklidir. Performans açısından çok fazla fark yoktur, ancak okunabilirlik ve hata yönetimi açısından en avantajlı olanıdır.
Sonuç
Uygulamanızın gereksinimlerine göre doğru yöntemi seçmek, hem kodunuzun sürdürülebilirliğini artırır hem de geliştirici deneyiminizi iyileştirir. Eğer yeni bir projeye başlıyorsanız, Async/Await ile başlamak, sizi birçok karmaşadan kurtarabilir.