Javascript’ te Currying

Currying fonksiyonel programlamada önemli bir tekniktir. Bir çok mülakattada mülakat sorusu olaraka sorulur.

Currying tekniği, bir fonksiyonu f(a, b, c) ‘daki gibi birden fazla parametre alacak şekilde çağırmak yerine, her seferinde f(a)(b)(c) gibi tek parametre ile çağrılacak şekilde dönüştürme işlemidir.

En basit şekilde aşağıdaki örneği inceleyelim.

function sum(a,b,c) {
    return a + b + c;
};
sum(5, 10, 15);

sum() fonksiyonunu currying tekniği ile yazalım.

const sum = (a) => {
    return (b) => {
        return (c) => {
            return a + b + c
        }
    }
}
sum(5)(10)(15);

Görüldüğü gibi yeni yazdığımız fonksiyonu her çağırdığımızda, yeni bir fonksiyon geri dönüyor.

Currying konseptini iyi anlamak için javascriptteki Closure kavramını bilmek gerekiyor.

Avantajları

  1. Aynı fonksiyonu kısmi olarak çağırarak projenin farklı yerlerinde farklı sonuçlar dönmesini sağlamış oluyoruz.
  2. Kod tekrarını önlemiş oluyoruz.
  3. Aynı parametreyi tekrar tekrar girmemizi önlüyoruz.

Örnek:

const logs = (logType) => {
  return (logDate) => {
    console.log(`${logType} : there was an issue on ${logDate}.`);
  };
};

const logDate = logs('Warning');
//1. Log Message
logDate(new Date());
//2. Log Message
logDate(new Date());

Başarılar Dilerim..