Saat ini saya sedang mempelajari JavaScript dan terjebak dengan menambahkan parameter ke fungsi saya yang seharusnya menambahkan dua angka. Saya bukan orang baru dalam pemrograman. Melakukan banyak hal di Java dan C#, tetapi Javascript membuat saya gila dengan cakupan dan penulisan dan kari.... Jadi inilah masalah saya:

const compose = (f, g) => (a) => f(g(a));
const add1 = (num) => num + 1;
const add5 = (num) => num + 5;
compose(add1, add5)(10)          // 16

Kode di atas berfungsi! Tetapi saya ingin angka +1 dan +5 menjadi variabel sehingga saya dapat memiliki seperti ini:

// Something linke this 
const compose = (f, g) => (a,b) => f(g(a,b));
const add1 = (num, num2) => num + num2;
const add5 = (num, num2) => num + num2;
compose(add1, add5)(10, 4)   // Those numbers should be the Parameter input for add1 and add5 (num, num2) 
3
Codex0607 28 Oktober 2019, 14:49

2 jawaban

Jawaban Terbaik

Mungkin seperti ini:

    const addN = (n) => num => num + n
    const compose = (f,g) => a => f(g(a));
    const result = compose(addN(10),addN(4))(1);
    console.log(result);

addN membuat fungsi penambah, dalam hal ini add10 dan add4. Alih-alih mengembalikan nilai seperti add1 dan add5 asli Anda, addN mengembalikan fungsi seperti add1 dan add5 kecuali itu tidak di-hardcode menjadi +1 atau +5; itu adalah + apa pun yang Anda berikan saat Anda memanggil addN.

console.log(addN(6)(10)); //16

addN(6) membuat fungsi "add6", dan kemudian kita memanggil fungsi "add6" itu dengan 10 untuk mendapatkan output 16

3
Anthony 28 Oktober 2019, 12:11

Anda juga dapat menggunakan fungsi kari seperti ini untuk mencapai hal yang sama dengan cara yang lebih baik/sederhana tanpa menyusunnya.

// add = a => b => Number
const add = a => b => a + b;

const result = add(2)(3); // => 5

Pertama, fungsi mengambil a, dan kemudian mengembalikan fungsi baru, yang kemudian mengambil b mengembalikan jumlah a dan b. Setiap argumen diambil satu per satu. Jika fungsi memiliki lebih banyak parameter, ia dapat terus mengembalikan fungsi baru hingga semua argumen diberikan dan aplikasi dapat diselesaikan.

0
sibabrat swain 28 Oktober 2019, 12:17