CodeBlanks Logo Icon CodeBlanks

Curry

JavaScript kursu · İleri seviye · Ders 57/100

Bir fonksiyonu argümanları sırayla alan zincir haline getirmeyi öğrenirsin.

Currying

Currying, tek bir fonksiyonu argümanları sırayla alan bir zincire çevirir. Üç argümanlı bir fonksiyon, her seferinde bir argüman alan üç iç içe fonksiyona dönüşür.

const add = a => b => c => a + b + c;
add(1)(2)(3); // 6

Her çağrı bir sonraki fonksiyonu döndürür. Son çağrıya kadar gerçek hesap yapılmaz. Bu yapı, argümanları adım adım bağlayarak yeni fonksiyonlar üretmeyi kolaylaştırır.

Kısmi uygulama

Kısmi uygulama (partial application), bir fonksiyona bazı argümanları önceden bağlayıp yeni bir fonksiyon üretmektir. Currying bu fikrin doğal bir sonucudur.

const add = a => b => c => a + b + c;
const addOne = add(1); // b => c => 1 + b + c
addOne(2)(3); // 6

Burada add(1) çağrısı a'yı bağlar ve geriye iki argümanlı bir fonksiyon bırakır. addOne artık hazır bir fonksiyondur ve istediğin yerde yeniden kullanılabilir.

Uygulama Curried multiply fonksiyonu yaz

multiply adında curried bir fonksiyon yaz. a'yı alır, b'yi alan ve a * b döndüren bir fonksiyon döndürür (a => b => a * b). Sonra console.log(multiply(3)(4)) çağrısını yazdır.

Örnek çözümü göster
const multiply = a => b => a * b;
console.log(multiply(3)(4));

Kendini test et

  1. add(1)(2)(3) ne gerektirir?

    • Tek bir fonksiyon çağrısı
    • İç içe dönmüş fonksiyonlar
    • Bir Promise zinciri
    • Bir döngü
    Cevabı göster

    İç içe dönmüş fonksiyonlar — Doğru! Her çağrı bir sonraki fonksiyonu döndürür; iç içe dönmüş fonksiyonlar gerekir.

  2. İlk argümanı bağla

    const add = a => b => c => a + b + c;
    const addOne = add(____);
    Cevabı göster
    const add = a => b => c => a + b + c;
    const addOne = add(1);
  3. Currying kavramlarını eşleştir

    currying
    argümanları sırayla
    partial application
    bazı argümanları sabitler
    a => b => c
    curry sözdizimi

İleri seviye bölümündeki tüm dersler