Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!
[NODE JS] Callback Nedir? Callback Pattern Anlatimi
Merhaba arkadaslar, bugun Node.js'in temel taslarindan biri olan callback kavramini ve callback pattern'ini derinlemesine inceleyecegiz. Callback'ler Node.js'in asenkron dogasinin temeli ve bunlari anlamadan Node.js'te verimli kod yazmak mumkun degil. Ben ilk Node.js ogrendigimde callback mantigi kafami cok karistirmisti cunku daha once sadece senkron diller kullanmistim. Ama bir kere oturduktan sonra her sey daha anlamli olmaya basladi.
Callback Nedir?
Callback en basit tanimiyla, baska bir fonksiyona parametre olarak gecirilen ve belirli bir islem tamamlandiginda cagrilan fonksiyondur. Yani bir fonksiyona "su isi yap, bittiginde beni ara" diyorsunuz. Gercek hayattan bir ornek verelim: restorana yemek siparis veriyorsunuz, garson numaranizi aliyor ve yemek hazir oldugunda sizi cagiriyor. Burada garsonun sizi geri aramasi bir callback'tir.
JavaScript'te fonksiyonlar "first-class citizen" yani birinci sinif vatandaslardir. Bu ne demek? Fonksiyonlari degiskenlere atayabilir, diger fonksiyonlara parametre olarak gecebilir ve fonksiyonlardan dondürebilirsiniz. Iste callback pattern'i bu ozellige dayanir.
JavaScript:
// Callback'in en basit hali
function selamVer(isim, callback) {
console.log(`Merhaba ${isim}!`);
callback();
}
selamVer('Ahmet', function() {
console.log('Selamlama tamamlandi');
});
// Arrow function ile daha temiz
selamVer('Mehmet', () => {
console.log('Bu da arrow function callback');
});
// Parametre alan callback
function hesapla(a, b, islem) {
const sonuc = islem(a, b);
console.log(`Sonuc: ${sonuc}`);
}
hesapla(10, 5, (x, y) => x + y); // Toplama
hesapla(10, 5, (x, y) => x * y); // Carpma
hesapla(10, 5, (x, y) => x - y); // Cikarma
// Asenkron callback ornegi
console.log('1. islem');
setTimeout(() => {
console.log('2. islem (1 saniye sonra)');
}, 1000);
console.log('3. islem (ama 2. islemden once calisir!)');
Node.js Error-First Callback Pattern
Node.js'te bir konvansiyon vardir: callback fonksiyonlarinin ilk parametresi her zaman error nesnesidir. Buna "error-first callback" veya "Node.js callback convention" denir. Islem basarili olursa error null olur ve ikinci parametrede sonuc gelir. Hata olursa error bir Error nesnesi olur. Bu konvansiyon sayesinde tum Node.js ekosisteminde tutarli bir hata yonetimi yapilabilir.
Bu pattern'i kullanirken en onemli kural, her zaman ilk once error'u kontrol etmektir. Cok fazla yeni baslayanin bu kontrolu atladigini goruyorum ve sonra neden kodlarinin sessizce basarisiz oldugunu anlayamiyorlar. Error kontrolu yapmak ilk basta gereksiz gibi gorunebilir ama production'da hayat kurtaricidir.
JavaScript:
const fs = require('fs');
const path = require('path');
// Node.js error-first callback pattern
// Kural: Ilk parametre HER ZAMAN error
// Ornek 1: Dosya okuma (Node.js'in kendi API'si)
fs.readFile(path.join(__dirname, 'config.json'), 'utf8', (error, data) => {
if (error) {
// Hata var, islem basarisiz
console.error('Dosya okunamadi:', error.message);
return; // ONEMLI: return ile fonksiyondan cik
}
// Hata yok, islem basarili
console.log('Dosya icerigi:', data);
});
// Ornek 2: Kendi fonksiyonumuzu yazalim
function kullaniciBul(id, callback) {
// Veritabanini simule edelim
const kullanicilar = {
1: { ad: 'Ahmet', yas: 28 },
2: { ad: 'Ayse', yas: 32 },
3: { ad: 'Fatma', yas: 25 }
};
// Asenkron islemi simule et
setTimeout(() => {
const kullanici = kullanicilar[id];
if (!kullanici) {
// Hata durumu: error nesnesini gonder
callback(new Error(`Kullanici #${id} bulunamadi`), null);
return;
}
// Basari durumu: error null, sonuc ikinci parametre
callback(null, kullanici);
}, 100);
}
// Kullanim
kullaniciBul(1, (error, kullanici) => {
if (error) {
console.error('Hata:', error.message);
return;
}
console.log('Bulunan kullanici:', kullanici);
});
kullaniciBul(99, (error, kullanici) => {
if (error) {
console.error('Hata:', error.message);
return;
}
console.log('Bulunan kullanici:', kullanici);
});
// Ornek 3: Zincirleme callback islemleri
function dosyaOkuVeIsle(dosyaYolu, callback) {
fs.readFile(dosyaYolu, 'utf8', (readError, icerik) => {
if (readError) {
callback(readError, null);
return;
}
// Icerigi isle
try {
const veri = JSON.parse(icerik);
veri.okunanZaman = new Date().toISOString();
callback(null, veri);
} catch (parseError) {
callback(parseError, null);
}
});
}
// Kendi async fonksiyonunuzu her zaman error-first pattern ile yazin
function veritabanSorgusu(sorgu, parametreler, callback) {
// Parametre dogrulama
if (!sorgu || typeof sorgu !== 'string') {
// Senkron hatalar icin process.nextTick kullanin
process.nextTick(() => {
callback(new Error('Sorgu string olmalidir'), null);
});
return;
}
// Asenkron islem
setTimeout(() => {
try {
const sonuc = { satirlar: [], etkilenen: 0 };
callback(null, sonuc);
} catch (error) {
callback(error, null);
}
}, 50);
}
Callback Kullanirken Yapilan Hatalar
Yillar icinde gordugun en yaygin callback hatalari sunlar: Birincisi, error kontrolunu atlama. Ikincisi, callback'i birden fazla kez cagirma, bu ozellikle if/else bloklarinda return kullanmayi unutunca olur. Ucuncusu, senkron hatalari try/catch yerine callback ile gondermemek. Dorduncusu, callback icinde exception firlatmak (throw). Node.js callback'leri icinde throw kullanirsaniz, ust fonksiyon bunu yakalayamaz cunku callback asenkron calisir.
Benim tavsiyem, yeni projelerde mumkun oldukca Promise ve async/await kullanmaniz yonunde. Ama eski kodlarla calisirken veya bazi Node.js core API'lerini kullanirken callback'lerle karsilasacaksiniz. O yuzden bu pattern'i iyi anlamak sart. Bir sonraki konumuz callback hell, onu da okumadan gecmeyin!
Emeğiniz ve katkınız için teşekkür ederiz!
Konunuz gerekli incelemelerden geçerek onaylandı. Topluluğumuza katkılarınızın devamını bekliyoruz.
İyi forumlar!
Konunuz gerekli incelemelerden geçerek onaylandı. Topluluğumuza katkılarınızın devamını bekliyoruz.
İyi forumlar!

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 2
- Görüntüleme
- 62
- Cevaplar
- 2
- Görüntüleme
- 58
- Cevaplar
- 2
- Görüntüleme
- 60
- Cevaplar
- 5
- Görüntüleme
- 506
