Asenkron ve Senkron Fonksiyonlar Arasındaki Farklar Nelerdir?
JavaScript ile yazılım geliştirirken, asenkron ve senkron fonksiyonlar sıklıkla karşılaşılan kavramlardır. Bu yazıda, bu iki tür fonksiyonun farklarını, avantajlarını, dezavantajlarını ve uygun kullanım durumlarını ele alacağım. Ayrıca, özellikle asenkron işlemlerde kullanılan await
anahtar kelimesini de örneklerle açıklayacağım.
Senkron Fonksiyonlar
Senkron fonksiyonlar, işlemlerin sırayla ve beklenen sırada gerçekleştiği fonksiyonlardır. Bir işlem tamamlanmadan bir sonraki işleme geçilmez ve işlemler adım adım ilerler. Senkron fonksiyonlar, işlem tamamlanana kadar kodunun beklemesini isteyen durumlarda kullanılır.
Örnek:
function senkronFonksiyon() {
console.log("İşlem başladı.");
console.log("İşlem devam ediyor.");
console.log("İşlem tamamlandı.");
}
console.log("Fonksiyon başladı.");
senkronFonksiyon();
console.log("Fonksiyon tamamlandı.");
Bu fonksiyon çağrıldığında, her console.log
ifadesi sırayla çalışacak ve işlem tamamlandıktan sonra bir sonraki kod satırına geçilecektir.
Çıktı:
Fonksiyon başladı.
İşlem başladı.
İşlem devam ediyor.
İşlem tamamlandı.
Fonksiyon tamamlandı.
Avantajlar:
- Kolay anlaşılabilir ve düzenlenebilir.
- Hata yönetimi daha kolaydır.
- İşlemler sıralı olarak gerçekleşir, beklenen sonuçlar elde edilir.
Dezavantajlar:
- Bir işlem tamamlanmadan diğerine geçilmediği için performans sorunlarına yol açabilir.
- Uygulamanın donmasına neden olabilir.
Asenkron Fonksiyonlar
Asenkron fonksiyonlar ise işlemlerin sırayla değil, eş zamanlı olarak gerçekleştiği fonksiyonlardır. Bir işlem tamamlanmadan diğerine geçilebilir ve kodun devam etmesine izin verilir. Asenkron fonksiyonlar genellikle ağ istekleri, dosya okuma/yazma gibi zaman alan işlemler için kullanılır.
Örnek:
function asenkronFonksiyon() {
console.log("İşlem başladı.");
setTimeout(() => {
console.log("İşlem devam ediyor.");
}, 2000);
console.log("İşlem tamamlandı.");
}
console.log("Fonksiyon başladı.");
asenkronFonksiyon();
console.log("Fonksiyon tamamlandı.");
Bu fonksiyon çağrıldığında, setTimeout
işlemi asenkron olarak çalışacak ve diğer console.log
ifadesi işlemin tamamlanmasını beklemeden çalışacaktır.
Çıktı:
Fonksiyon başladı.
İşlem başladı.
İşlem tamamlandı.
Fonksiyon tamamlandı.
İşlem devam ediyor.
Avantajlar:
- Performansı artırır, uygulamanın daha hızlı çalışmasını sağlar.
- Bekleme sürelerini optimize eder.
- Paralel işlemler için idealdir.
Dezavantajlar:
- Kod karmaşıklığını artırabilir.
- Hata yönetimi zor olabilir.
Asenkron Fonksiyonlarda "await"
Kullanımı
await
, asenkron bir fonksiyon içinde başka bir asenkron işlemi beklemek için kullanılan bir anahtar kelimedir. await
, bir işlemin tamamlanmasını bekler ve ardından kodun geri kalanını çalıştırır. await
anahtarının çalışması için bir promise dönmesi gerekmektedir.
Çıktı:
async function asenkronBekleyenFonksiyon() {
console.log("İşlem başladı.");
await new Promise(resolve => {
setTimeout(() => {
console.log("İşlem devam ediyor.");
resolve();
}, 2000);
});
console.log("İşlem tamamlandı.");
}
console.log("Fonksiyon başladı.");
asenkronBekleyenFonksiyon();
console.log("Fonksiyon tamamlandı.");
Bu fonksiyon çağrıldığında, ilk setTimeout
işlemi asenkron olarak çalışacak, ikinci setTimeout
işlemi await
ifadesi nedeniyle 2 saniye boyunca bekleyecek ve ardından diğer console.log
ifadesi çalışacaktır.
Çıktı:
Fonksiyon başladı.
İşlem başladı.
Fonksiyon tamamlandı.
İşlem devam ediyor.
İşlem tamamlandı.
Sonuç
Asenkron fonksiyonlar işlemleri eşzamanlı olarak gerçekleştirirken, senkron fonksiyonlar işlemleri sıralı olarak yürütür. Asenkron fonksiyonlar performansı artırırken, senkron fonksiyonlar kolay anlaşılabilir ve hata yönetimi daha basittir. “await” anahtar kelimesi, asenkron fonksiyonlarda işlem tamamlanana kadar beklemeyi sağlar.