Skip to content

Latest commit

 

History

History
39 lines (33 loc) · 2.07 KB

memoization-function-in-javascript_tr.md

File metadata and controls

39 lines (33 loc) · 2.07 KB

JavaScript'te Memoization Fonksiyonu

Memoization fonksiyonları, hesaplaması maliyetli fonksiyonların daha önceki çıktılarını hafızasında tutarak fonksiyon hesaplama süresini ve bellek maliyetini düşürür. Örneğin bir fonksiyon belirli bir parametre ile çalıştırıldıkan sonra tekrar aynı parametreler ile çalıştırılırsa, ikinci çalışmasında birincidekine göre daha hızlı tepki verir çünkü bu değerler önbelleğe alınmıştır. Şimdi bu memoization fonksiyonunu JavaScript ile yazacağım.

function memo(func) {
  const cache = {};

  return function(...params) {
    const stringifiedParams = JSON.stringify(params);
    const isExaminedBefore = cache.hasOwnProperty(stringifiedParams);

    if (isExaminedBefore) {
      return cache[stringifiedParams];
    }

    const result = func(...params);
    cache[stringifiedParams] = result;

    return result;
  };
}

memo adlı fonksiyonumuz, bir yüksek merteben fonksiyon. Bu fonksiyon, kendisine önce bir hedef fonksiyon alıyor. Daha sonra bu fonksiyonun parametrelerini her çağırıldığında alıp, daha önceki çalıştırmalardaki sonuçların tutulduğu cache objesinde olup olmadığını kontrol ediyor. Eğer varsa, sonuc cache objesinden alınıyor. Eğer yoksa, hedef fonksiyonda işlem yapılıp sonuc cache değişkeninde tutulmaya başlanıyor.

Kullanımı ise şöyle:

const memoizedPower = memo(Math.pow);
console.log(memoizedPower(15, 15)); // calculated
console.log(memoizedPower(15, 15)); // from cache

Memoized fonksiyonlar, aynı parametre icin aynı sonuçu veren pure function fonksiyonlar için geçerlidir. Örneğin REST API isteği gibi. Şimdi memoized fonksiyonun sonucu ne kadar sürede ürettiğine bakacak olursak, fonksiyonu ilk kez çalıştırdığımızda hesaplaması 0.51 ms sürerken, ikinci çalıştırmada bu süre 0.19 ms'e düştü.

console.time("calculate");
console.log(memoizedPower(15, 15));
console.timeEnd("calculate"); // 0.51ms
console.time("cache");
console.log(memoizedPower(15, 15));
console.timeEnd("cache"); // 0.19