Bu ders için video bulunmamaktadır.
Ders İçeriği
Giriş: Neden Eşzamansızlık?
JavaScript, temelde tek iş parçacıklı (single-threaded) bir dildir. Bu, normalde kodun satır satır, sırayla çalıştığı ve bir işlem bitmeden diğerine geçilmediği anlamına gelir. Bu durum, basit işlemler için sorun yaratmaz. Ancak, zaman alan işlemler (örneğin, bir sunucudan veri istemek, büyük bir dosyayı okumak, zamanlayıcılar kullanmak) söz konusu olduğunda, bu işlemlerin tamamlanmasını beklemek tüm programın (ve özellikle tarayıcıdaki kullanıcı arayüzünün) kilitlenmesine, yanıt vermemesine neden olur. Bu durum "blocking" (engelleme) olarak adlandırılır.
Kullanıcı deneyimini olumsuz etkileyen bu durumu aşmak için JavaScript, eşzamansız (asynchronous) programlama modelini kullanır. Eşzamansızlık, zaman alan bir işlemin arka planda başlamasını ve tamamlandığında bir bildirim mekanizmasıyla sonucun alınmasını sağlar. Bu sırada ana iş parçacığı diğer görevlere (örneğin, kullanıcı arayüzünü güncel tutmak, diğer olaylara yanıt vermek) devam edebilir.
Eşzamansız işlemleri yönetmek için JavaScript'te çeşitli mekanizmalar geliştirilmiştir. Bu derste, bu mekanizmaların en temel olanlarından biri olan callback (geri arama) fonksiyonlarını inceleyeceğiz.
Senkron vs. Eşzamansız Çalışma
Senkron (Synchronous) Çalışma
Kodlar yazıldığı sırayla, bir işlem bitmeden diğeri başlamayacak şekilde çalışır. Her satır bir sonrakini bekler.
Eşzamansız (Asynchronous) Çalışma
Zaman alan işlemler arka planda başlatılır ve ana iş parçacığı bekletilmez. İşlem tamamlandığında sonuç (veya hata) genellikle bir callback fonksiyonu aracılığıyla iletilir.
Tarayıcı ortamında veya Node.js'te birçok yerleşik fonksiyon eşzamansız çalışır (örneğin, setTimeout
, setInterval
, olay dinleyicileri, ağ istekleri (fetch/AJAX), dosya sistemi işlemleri (Node.js)).
Gördüğünüz gibi, setTimeout
içindeki fonksiyon hemen çalışmadı. Program İşlem 2 başladı.
mesajını yazdırdı ve ancak 2 saniye geçtikten sonra setTimeout
'un callback fonksiyonu çalıştırıldı. Bu sırada ana iş parçacığı engellenmedi.
Callback Fonksiyonları Nedir?
Callback (geri arama) fonksiyonu, başka bir fonksiyona argüman olarak geçirilen ve o fonksiyonun içinde (genellikle belirli bir işlem tamamlandıktan sonra) çağrılan fonksiyondur.
Eşzamansız programlamada callback'ler, zaman alan bir işlem bittiğinde ne yapılacağını belirtmek için kullanılır. İşlemi başlatan fonksiyona, işlem bittiğinde çağrılacak olan bir callback fonksiyonu veririz.
Basit Callback Örneği
Bu örnekte, hesapla
fonksiyonu bir işlem yapar (setTimeout
ile simüle edildi) ve işlem bittiğinde kendisine verilen callback
fonksiyonunu (yani sonucuGoster
'i) çağırarak sonucu iletir.
Hata Yönetimi ile Callback'ler
Eşzamansız işlemler sırasında hatalar oluşabilir (örneğin, ağ bağlantısı kopması, dosya bulunamaması). Callback deseninde hata yönetimi genellikle callback fonksiyonuna ilk argüman olarak bir hata nesnesi geçirilerek yapılır. Eğer hata yoksa bu argüman null
veya undefined
olur.