JavaScript’te “higher-order function” Kullanımı

JavaScript’te bir “higher-order function” (üst düzey fonksiyon), başka bir fonksiyonu argüman olarak alan veya bir fonksiyonu sonuç olarak döndüren fonksiyondur.

Bu kavram, fonksiyonel programlamanın temel bir özelliğidir ve JavaScript gibi birinci sınıf fonksiyonları destekleyen dillerde yaygın olarak kullanılır.

Başka Bir Fonksiyonu Argüman Olarak Almak

Bir üst düzey fonksiyon, başka bir fonksiyonu parametre olarak alabilir. Bu genellikle geri çağırma fonksiyonları (callbacks) ile yapılır. Örneğin, Array.prototype.map, Array.prototype.filter, ve Array.prototype.reduce gibi yerleşik JavaScript fonksiyonları, her biri bir dizi üzerinde işlem yapmak için bir geri çağırma fonksiyonu alır. Örneğin:

const numbers = [1, 2, 3];
const doubled = numbers.map(number => number * 2); 
// map bir higher-order function'dır.

Bir Fonksiyonu Sonuç Olarak Döndürmek

Bir üst düzey fonksiyon, başka bir fonksiyonu sonuç olarak döndürebilir. Genel olarak, kapsamı korumak, kısmi uygulama yapmak, veya “currying” gibi teknikler için kullanılır.

Kapsamı Koruma

Bir üst düzey fonksiyon, iç kapsamında tanımlanan değişkenlere erişimi olan başka bir fonksiyonu döndürebilir. Bu hem dış fonksiyonun değişkenlerinin yaşam süresini uzatır hem de iç fonksiyonun bu değişkenlere erişmesine olanak tanır. Örneğin:

function dışFonksiyon() {
    let dışDeğişken = 'Ben dış değişkenim';

    function içFonksiyon() {
        return 'İç fonksiyon burada: ' + dışDeğişken;
    }

    return içFonksiyon;
}

let yeniFonksiyon = dışFonksiyon();
console.log(yeniFonksiyon());  // "İç fonksiyon burada: Ben dış değişkenim"

Kısmi Uygulama

Kısmi uygulama, bir fonksiyonun bazı argümanlarını sabitleyip, geriye kalan argümanları alacak yeni bir fonksiyon döndürmek için kullanılır. Haliyle, fonksiyonun yeniden kullanılabilirliği artar ve kod tekrarı önlenir.

function toplama(a, b) {
    return a + b;
}

function kısmiUygulama(fn, a) {
    return function(b) {
        return fn(a, b);
    };
}

const beşEkle = kısmiUygulama(toplama, 5);
console.log(beşEkle(10));  // 15

Currying

Currying, bir fonksiyonun birden fazla argümanını tek tek alan ve her seferinde yeni bir fonksiyon döndüren bir süreçtir. Örneğin:

function multiply(a) {
  return function(b) {
    return a * b;
  };
}

const multiplyByTwo = multiply(2);
const multiplyByThree = multiply(3);

console.log(multiplyByTwo(4));  // 8 (2 * 4)
console.log(multiplyByThree(4)); // 12 (3 * 4)

Bu örnekte, multiply fonksiyonu, başka bir fonksiyon döndürür. Bu döndürülen fonksiyon, multiply‘nin aldığı ilk argümanı (a) kapsar ve başka bir argüman (b) alır. Sonuç olarak, multiplyByTwo ve multiplyByThree gibi yeni fonksiyonlar oluşturarak, multiply fonksiyonunun yeniden kullanılabilirliğini ve esnekliğini artırabiliriz.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu