JavaScript'in en güzel yanı, kodlama sürecini daha kolay ve verimli hale getirecek birçok işlevsellik sunmasıdır Bu eğitimde, JavaScript'te callback kullanarak promise ve async/await yönetimi hakkında detaylı bilgi edineceksiniz Bu yöntemlerle, kod yazma sürecinizde verimliliği ve doğruluğu artırabilirsiniz Daha iyi kod yazmanın yolunu keşfedin!

JavaScript, günümüzde en sık kullanılan programlama dillerinden biridir. Ancak, asenkron işlemlerle ilgilenirken kod yazmanın bazı zorlukları da vardır. Bu yüzden, Callback fonksiyonları, Promise'ler ve Async/Await fonksiyonları ile kod yazımı daha kolay hale getirilebilir. Bu makalede, JavaScript'te Callback'ler kullanarak Promise ve Async/Await kodlarını daha etkili hale getirmek için bazı ipuçları verilecektir.
Callback fonksiyonları, bir kod bloğunun tamamlanması ardından çalıştırılacak bir işlevdir. Bu şekilde, asenkron işlemler kontrol edilebilir. Promise'ler ise, bir işlemin tamamlanacağına dair bir sözleşme gibidir. Bu sayede, işlemler daha düzenli hale getirilebilir ve hatalar daha kolay yönetilebilir. Promise zincirleri, birbirine bağlı Promise nesneleri ile asenkron işlemleri yönetmenin etkili bir yoludur. Promise.all() ise, birden çok Promise nesnesi çalıştırmak ve sonuçlarını aynı anda almak için kullanılır.
Async/await fonksiyonları, Promise'lerin daha okunaklı ve etkili bir şekilde çalışmasını sağlamak için ES2017 ile birlikte tanıtıldı. Async fonksiyonları, Promise zincirinin kısaltılmış bir şekli olarak düşünülebilir. Await ifadesi ise, async fonksiyonları içinde kullanılan bir işlemdir ve Promise nesnesinin tamamlanmasını beklemek için kullanılır. En iyi uygulamalar arasında yalın kod yazma, doğru hata yönetimi ve gerekli yorumları ekleme gibi kod kalitesini ve etkinliğini artıracak öneriler yer almaktadır.
JavaScript'te code quality geliştirmek için bahsedilen araçlar oldukça önemli ve kullanışlıdır. Callback'ler, Promise'ler ve Async/Await fonksiyonları sayesinde, daha etkili ve düzenli kod yazmak mümkündür. Verilen ipuçları ile kod kalitesini ve etkinliğini artırmak mümkündür.
Callback Fonksiyonları
JavaScript'te Callback'ler, asenkron bir işlemin tamamlanmasından sonra çağrılacak bir işlevdir. Bir kod bloğundaki işlemler arasındaki sıralama ve zamanlama, kodun karmaşık hale gelmesine neden olabilmektedir. Bu noktada, Callback'ler devreye girerek işlemlerin sıralanmasını ve tamamlanmasından sonra çağrılacak işlevi belirlemeyi mümkün kılmaktadır.
Örneğin, bir dosyanın okunması için işlem başlatıldığında, okuma işleminin tamamlanmasını beklemek yerine Callback kullanarak işlemlerin yürütülmesine devam edebilirsiniz. Bu sayede okuma işlemi tamamlandığında, belirli bir işlevin çağrılması işlemi gerçekleştirilir. Callback'ler, JavaScript kodunda asenkron işlemlere yönelik kullanılan en önemli yöntemlerden biridir.
Promise'ler
JavaScript kodu içerisinde asenkron işlemleri yönetmek, kod verimliliği açısından son derece önemlidir. Bu işlemleri yönetmek amacıyla Promise'ler kullanılabilir. Promise, bir işlemin tamamlanacağına dair bir sözleşme olarak düşünülebilir. Bu sözleşme, işlem tamamlandıktan sonra belirlenen bir sonucu döndürecektir.
Promise, yeni bir nesne oluşturarak kullanılabilmektedir. Bu nesne üzerinde then() ve catch() metodları kullanılarak işlemin sonucu yakalanabilir ve hata durumunda uygun yönetim gerçekleştirilebilir. Promise, birden fazla işlemi yönetmek amacıyla bir dizi şeklinde de kullanılabilir. Promise dizisi oluşturulurken Promise.all() fonksiyonu kullanılabilir. Bu fonksiyon, birden fazla promise işlemini eş zamanlı olarak çalıştırır ve tüm sonuçları tek bir veri şeklinde döndürür.
Promise'ler, asenkron işlemleri yönetmek amacıyla kullanılabilecek en etkili yöntemlerden biridir ve JavaScript kodu içerisinde oldukça yaygın olarak kullanılmaktadır.
Promiseler Nasıl Çalışır?
Promiseler, JavaScript kodu içindeki asenkron işlemleri yönetmek için kullanılan temel bir araçtır. Bir promise, bir işlemin tamamlanacağına dair bir sözleşme gibidir. Bu sözleşme, iki farklı durum için bir değer döndürür; işlem başarılı olursa bir değer verir, aksi takdirde bir hata döndürür. Promiseler, veri işleme, dosya okuma/yazma gibi işlemlerde kullanılabilir.
Promise nesneleri, üç ana yöntemle yönetilebilir: resolve(), reject() ve finally(). resolve() yöntemi, işlem başarılı olduysa yapılandırılan işlemleri gerçekleştirir ve değeri geri döndürür. reject() yöntemi, işlem hatası yaşadığında yapılandırılan işlemleri gerçekleştirir ve hata mesajını geri döndürür. finally() yöntemi ise işlem sonlandığında yapılacak işlemleri gerçekleştirir, bu işlem hata alınması durumunda da gerçekleştirilir.
Metod | Açıklama |
---|---|
then() | Promisin başarılı olması durumunda çalışacak fonksiyonu belirtir. |
catch() | Promisin hata alması durumunda çalışacak fonksiyonu belirtir. |
finally() | Promisin sonunda çalışacak fonksiyonu belirtir. |
Promiselerin en önemli özelliklerinden biri, birbiri ardına zincirleme imkanı sunmalarıdır. Bu şekilde birbirine bağlı işlemler tek bir zincirde çalıştırılabilir. Zincirleme yaparken, her bir işlemde then() veya catch() yöntemleri kullanılır. Bu sayede kod sadeleştirilir ve daha okunaklı hale gelir.
Promise Zincirleri
Promise zincirleri, bir asenkron işlem gerçekleştirildiğinde ardından başka bir işlem gerçekleştirmek ve bunları birkaç adımı takip ederek sıralamak için kullanılır. Bu, bir kod bloğunda sırayla işlem yapmak veya birden fazla kod bloğunu bağlamak için harika bir yöntemdir. Zincirin her adımında bir Promise nesnesi kullanılır ve bir işlem bittiğinde Promise nesnesi onaylandığında veya reddedildiğinde bir sonraki işlemi tetikler.
Bir Promise nesnesi henüz tamamlanmadıysa bir sonraki adıma atlamaz. Bu sayede, zincirin ardışık adımlarında bir işlem hata verdiğinde zincir kesilir ve hata yakalanır. Promise zincirleri JavaScript'te daha öngörülebilir ve daha kolay anlaşılır bir kod yazma sürecine yardımcı olur.
Bir Promise nesnesi oluşturulduktan sonraki adımlar şöyle gerçekleştirilir:
- Bir Promise zincirine başla ve ilk Promise'i oluştur.
- Bir yürütme adımı belirleyerek bir işlemi başlat.
- İşlem onaylandığında, bir sonraki Promise'i oluşturarak zincire bağlan.
- İşlem reddedildiğinde, hatayı yakalayan bir hata işleyici ekleyerek zincirin kesilmesine izin ver.
- Eğer zincirin sonuna ulaşılırsa, sonucu yakala ve yürütme tamamlandığında işlem hakkında bilgi ver.
Bu adımlar sayesinde asenkron kod daha öngörülebilir ve daha okunaklı bir hale gelir.
Promise.all()
Promise.all(), birden çok Promise nesnesini çalıştırmanın etkili bir yoludur. Bu yöntem, tüm Promise nesneleri tamamlandığında sonuçlarını tek bir dizi içinde döndürür. Bu, aynı işlevi birden fazla defa çağırmak yerine sadece bir kere çağırmak ve sonuçlarını tek bir işleme verimli bir şekilde almaya olanak sağlar.
Bir dizi Promise nesnesi Promise.all() yöntemi tarafından kabul edilir ve sonuç, tüm Promise nesneleri tamamlanana kadar bekler. Tüm Promise nesneleri birden fazla zincirde çalıştırılıyor olsa bile, Promise.all() tüm zincirlerin tamamlanmasını bekler. Bu, koleksiyon verileri üzerinde daha hızlı ve daha etkili işlemler yapmak için ideal bir yöntemdir.
Kod Örneği: |
---|
Promise.all([sayiUret(), sayiUret(), sayiUret()]) .then(degerler => { console.log(degerler); }); |
Bu örnekte, üç farklı Promise nesnesi sayiUret() işlevinden çağrılır ve Promise.all() yöntemi tarafından çalıştırılır. Tüm zincirler tamamlandığında, son değerler tek bir dizi içinde döndürülür ve bu değerler console.log() yöntemi tarafından yazdırılır.
Promise.all() yöntemi, kodun daha etkili bir şekilde çalışmasını sağlar ve birden fazla Promise nesnesi ile uğraşan geliştiriciler tarafından yaygın bir şekilde kullanılır.
Async/Await Fonksiyonları
Async/await fonksiyonları, Promise'leri yalın, daha anlaşılır ve daha okunaklı bir şekilde kullanmamıza olanak tanır. ES2017 ile birlikte tanıtılan async/await, şimdi JavaScript'in ana akımında olan bir özelliktir.
Async fonksiyonları, Promise zincirinin kısaltılmış bir şekli olarak düşünülebilir. Fonksiyonun başına async ekleyerek, fonksiyonu Promise döndüren bir fonksiyon olarak işaretleyebiliriz.
Await ifadesi, Promise nesnesinin tamamlanmasını beklemek için kullanılır. Await ifadesi yalnızca async fonksiyonları içinde çalışır. Bir Promise nesnesini beklerken, diğer yorumlamaların işleyişini durdurur ve kodun daha temiz ve okunaklı bir şekilde yazılmasını sağlar.
Async Fonksiyonu | Promise Zinciri |
---|---|
async function myFunction() { const result = await fetch('https://example.com'); console.log(result); } | fetch('https://example.com') .then(function(response) { return response.json(); }) .then(function(result) { console.log(result); }) .catch(function(error){ console.log(error); }); |
Async/await fonksiyonlarının kullanımı, kodun daha sade ve okunaklı olmasını sağlar. Async/await ile programlama, Promise zincirini kısaltarak, kodun daha kolay bakımını ve genişletilmesini sağlar.
Async Fonksiyonları
JavaScript kodunda, Promise zincirindeki yineleme ve tekrarları azaltmak ve daha okunaklı bir kod yazmak için Async fonksiyonları kullanabilirsiniz. Async fonksiyonları, Promiseleri daha kısa bir şekilde yazmanıza olanak tanır. Async fonksiyonları da normal bir fonksiyon gibi çalışır, ancak yapması gereken bir işlem varsa Promise olarak döner.
Async fonksiyonlarının temel özellikleri şunlardır:
- Async fonksiyonları, Promise'nin daha kısa bir şekilde ifade edilmesi için kullanılır.
- Async fonksiyonları bir fonksiyon ifadesi olarak tanımlanır ve Promise nesnesi döndürür.
- Async fonksiyonları await ifadesini kullanarak Promise ifadelerini işleyebilir. Bu işlemi tamamlarken, async fonksiyonlarını da diğer işleri yapmak için beklemeye alır.
Bir async fonksiyon kullanarak Promise zincirini kısaltabileceğinizi unutmayın. Bu, kodun okunaklılığını ve anlaşılabilirliğini artırır. Async fonksiyonlarının kullanımı, JavaScript kodunu daha sade hale getirerek, teknik hataları en aza indirir ve bakımı da kolaylaştırır.
Await İfadesi
Await İfadesi
JavaScript'de async fonksiyonlar kullanarak asenkron işlemler yönetilebilir. Bu işlemlerde Promise objeleri kullanılır ve Promise nesnesi tamamlandıktan sonra bir sonraki adıma geçilir. Ancak, bazen bir işlemin Promise nesnesinin tamamlanması beklenmeden devam etmesi istenebilir. İşte bu noktada await ifadesi devreye girer. Await ifadesi, async fonksiyonlar içerisinde kullanılır ve bir Promise nesnesinin tamamlanması beklenir.
Örneğin, async bir fonksiyon içerisinde bir dosyayı okumak için var olan bir Promise kullanmak isteyelim. Kodumuz şu şekilde olacaktır;
async function readFile() { const fileContent = await file.read(); //dosya okunana kadar duraklar console.log(fileContent);}
Burada, await ifadesi dosya okunana kadar fonksiyonu duraklatır ve Promise nesnesinin tamamlanmasını bekler. Bu sayede dosyanın içeriği doğrudan yazdırılır ve daha okunaklı bir kod elde edilir.
En İyi Uygulamalar
JavaScript kodu yazarken, code quality için bazı en iyi uygulamaların kullanılması önemlidir. Bu uygulamalar, kodun daha kolay okunmasını, daha az hata yapılmasını, daha iyi performans sağlanmasını ve koda daha az zaman harcanmasını sağlar. JavaScript'te code quality geliştirmek için bazı en iyi uygulamalar şunlardır:
- Yalın Kod Yazma: Karmaşık kodlar yerine, basit anlaşılır kodlar yazmak okunabilirliği artırır. Kodlar anlaşılır olmalı ve gereksiz kod bloklarından kaçınılmalıdır.
- Doğru Hata Yönetimi: Kodda hatalar oluşabilir. Bu hataların düzeltilmesi için doğru hata yönetimi şarttır. Hata mesajları anlaşılır olmalı ve hatanın kaynağı hızlıca bulunmalıdır.
- Gerekli Yorumları Ekleme: Kod okunabilirliği artırmak için gerekli yorumlar eklenmelidir. Bu yorumlar, kodun amacını açıklamalıdır ve kodun neden böyle yazıldığını anlatmalıdır.
- Doğru İsimlendirme: Değişkenler, fonksiyonlar ve nesneler doğru şekilde isimlendirilmelidir. İsimlendirme açık ve anlaşılır olmalıdır. Bu, kodun daha hızlı anlaşılmasını ve hatasız olmasını sağlar.
- Düzgün Formatlama: JavaScript kodu düzgün şekilde formatlanmalıdır. Düzgün formatlama, kodun daha okunaklı hale gelmesini sağlar ve hataların azaltılmasına yardımcı olur.
Yukarıdaki en iyi uygulamalar, JavaScript kod kalitesini ve yapılan hataları azaltmaya yardımcı olur. Bu uygulamalar, kodun okunabilirliğini, anlaşılabilirliğini ve performansını artırırken aynı zamanda zaman ve kaynakların verimli kullanımını da sağlar.
Sonuç
JavaScript'te Callback'ler, Promise'ler ve Async/Await fonksiyonları, kodunuzda asenkron işlemleri yönetmek için kullanılabilecek önemli araçlardır. Bu yazıda, bu araçları verimli bir şekilde kullanmak için bazı ipuçları paylaşıldı. Yalın kod yazma, doğru hata yönetimi, gerekli yorumları ekleme gibi en iyi uygulamaların uygulanması, kod kalitesini ve etkinliğini artırmaya yardımcı olacaktır.
Callback'ler, Promise'ler ve Async/Await fonksiyonları, kodunuzda asenkron işlemleri kolayca yönetmenizi sağlar. Promise zincirleri ile birbirine bağlı Promise nesneleri ile işlemleri yönetmek, yönetimi daha etkili hale getirir. Promise.all() kullanarak birden fazla Promise nesnesini aynı anda çalıştırabilir ve sonuçları tek bir yerde alabilirsiniz. Async/await fonksiyonları ile daha okunaklı ve etkili bir kod yazabilirsiniz.
Kodunuzun daha kaliteli ve etkin olması için, en iyi uygulamaları takip etmek önemlidir. Yalın kod yazma, doğru hata yönetimi, gerekli yorumları ekleme gibi uygulamaların benimsenmesi, kodun okunabilirliğini ve yönetilebilirliğini artırmaya yardımcı olacaktır. Bu yazıda sunulan ipuçları ile JavaScript kodunuzu daha etkili hale getirebilir ve daha iyi kode yazmanın yollarını öğrenebilirsiniz.