ECMAScript 6 - Promise Yapısı - Yazılım Mimarileri ve Tasarım Desenleri Üzerine

ECMAScript 6 – Promise Yapısı

Merhaba,

Bir Developer; geliştirdiği yazılımda doğru algoritma, performans, düşük maliyet vs. gibi faktörleri göz önüne alarak süreci işletmektedir. Lakin bu faktörler kadar önemli olan bir diğer husus ise yazılan kodların okunabilirlik derecesinin bir başka deyişle temiz kod kabiliyetinin yüksek olması gerekmektedir. Bu durum yazılım açısından gelecek vaadetme durumuna istinaden ilerideki süreçte kod akışının rahat bir şekilde tekrar takibinin yapılabilmesi için ve yeni fikirler, eklemeler yahut güncellemelerle yazılımı daha da ileri boyutta geliştirebilmek için gerekmektedir.

Promise yapısı, JavaScript’te oluşturulan kompleks ve okunabilirliği düşük olan fonksiyon yapıları için geliştirilmiş bir yapıdır. Özellikle iç içe CallBack olarak tanımlanmış fonksiyonlar yerine Promise yapısı hayat kurtarıcı nitelikte olacaktır.

let myFunction = (data, callback) => {
    console.log(data);
    callback(data + 5);
};

Yukarıdaki CallBack tanımlı fonksiyonu ele alalım. Bu fonksiyonu aşağıdaki gibi kompleks bir şekilde kullandığımızı varsayalım;

myFunction(5, function (data) {
    myFunction(data, function (data) {
        myFunction(data, function (data) {
            myFunction(data, function (data) {
                myFunction(data, function (data) {
                    myFunction(data, function (data) {
                        myFunction(data, function (data) {
                            myFunction(data, function (data) {
                                console.log(`Son ${data}`);
                            });
                        });
                    });
                });
            });
        });
    });
});

Evet, gördüğünüz gibi nerde ne var ne yok belli olmayan bir kod demeci…

Şimdi Promise yapısını kullanarak yukarıdaki kod bloğundaki işlevin bire bir aynısını oluşturmamızı sağlayacak yapımızı tanımlayalım.

Tabi öncelikle teknik olarak Promise yapısının nasıl kullanılması gerektiğini konuşalım.

let myFunction = () => {
    return new Promise((resolve, reject) => {
        if (data < 50)
            resolve(`Başarılı`);
        else
            reject(`Başarısız`);
    });
};

Yukarıdaki kod bloğunu incelerseniz eğer; CallBack metodumuzu Promise hale getirmiş bulunuyoruz. Fonksiyon geriye bir Promise nesnesi dönmekte ve constructer ile içerisine bir CallBack fonksiyonu tanımlanmaktadır. Bu fonksiyon “resolve” ve “reject” olmak üzere iki adet parametre almaktadır. Bu parametreler aslında birer CallBack fonksiyonudurlar.

  • resolve
    Eğer işlem başarılıysa tetiklenmektedir.
  • reject
    Eğer işlem başarısızsa tetiklenmektedir.

Şimdi fonksiyonumuzu aşağıdaki gibi Promise yapısında oluşturalım.

let myFunction = data => {
    return new Promise((resolve, reject) => {
        if (data < 45)
            resolve(data);
        else
            reject(`Son ${data}`);
    });
};

Artık Promise yapısının nimetlerinden faydalanarak kompleks çalışmamızı daha anlamlı bir hale getirebiliriz.

myFunction(5).then(data => {
    console.log(data);
    return data + 5;
}).then(data => {
    console.log(data);
    return data + 5;
}).then(data => {
    console.log(data);
    return data + 5;
}).then(data => {
    console.log(data);
    return data + 5;
}).catch(data => console.log(data));

Evet… Görüldüğü üzere “myFunction” çağrıldıktan sonra “then” foksiyonlarıyla bir sonraki çalışmaya geçebiliyoruz. Yani önceki kullanımdaki CallBack fonksiyonlara nazaran burada her adımı “then” fonksiyonlarıyla gerçekleştirebiliyoruz. Her bir “then” fonksiyonunda geriye return edilen değer bir sonraki “then” fonksiyonuna parametre olarak gelmektedir. Ayriyetten “reject” fonksiyonunun tetiklenmesi durumunda “catch” ile bütünsel bir hata kontrolüde sağlanabilmektedir.

“Kod yazmak sanattır…” Dolayısıyla tüm yazılımcıların bu sanatı daha anlamlı ve okunabilir icra etmesi temennisiyle…

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar dilerim…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 13 Temmuz 2018

    […] süreçlerde aynı mantıkta callback fonksiyonlarını pratik kullanabilmek için geliştirilmiş Promise Yapısını kullanarak çalışmalarımızı icra […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.