JavaScript'te Partial Application, Currying, Compose ve Pipe

Partial Application (Kısmi Uygulama)

Partial application, bir fonksiyona tüm argümanlarının değil, bir kısmının uygulandığı bir tekniktir. Bu sayede, daha sonra farklı argümanlarla tamamlanabilen yeni fonksiyonlar oluşturulabilir. Bu yöntem, fonksiyonlara daha fazla esneklik kazandırır.

function toplama(x, y, z) {
  return x + y + z;
}

const toplama5 = toplama.bind(null, 2, 3);
console.log(toplama5(4)); // 2 + 3 + 4 = 9

Currying

Currying, bir fonksiyonu sadece bir argümanla çağırma fikrine dayanır, ardışık fonksiyonlar için tek argümanlı bir fonksiyon (higher-order function) döndürür. Bu sayede, fonksiyonlar daha modüler ve esnek hale gelir.

function carpma(x) {
  return function(y) {
    return x * y;
  };
}

const carpma5 = carpma(5);
console.log(carpma5(3)); // 5 * 3 = 15

Compose

Compose, bir veya daha fazla fonksiyonu ardışık olarak birleştirip, yeni bir fonksiyon döndüren bir tekniktir. Bu yöntem, işlevsel programlama yaklaşımıyla fonksiyonları sıralı bir şekilde çalıştırmak için kullanılır.

const toplama = x => x + 10;
const carpma = x => x * 2;

const birlestirilmisFonksiyon = compose(carpma, toplama);
console.log(birlestirilmisFonksiyon(5)); // carpma(toplama(5)) = 2 * (5 + 10) = 30

Pipe

Pipe, compose'un tersine, fonksiyonları sırasıyla değil, soldan sağa doğru birleştirip yeni bir fonksiyon oluşturan bir tekniktir. Bu sayede, fonksiyon zincirlemeleri daha okunabilir hale getirilebilir.

const toplama = x => x + 10;
const carpma = x => x * 2;

const birlestirilmisFonksiyon = pipe(toplama, carpma);
console.log(birlestirilmisFonksiyon(5)); // carpma(toplama(5)) = 2 * (5 + 10) = 30

Bu teknikler, fonksiyonel programlama paradigmasıyla ilgili olup, JavaScript'te fonksiyonları daha etkili ve modüler bir şekilde kullanmamızı sağlar. Bu sayede, kod tekrarını azaltabilir, daha anlaşılır ve esnek kodlar yazabiliriz.