Saya kesulitan menemukan contoh kehidupan nyata menggunakan fungsi kari dan mendapatkan manfaat menggunakan kari.
Ketika saya fungsi google curry saya sering melihat contoh suka
let add = x => y => x + y;
let add10 = add(10);
console.log(add10(20));
Saya harus mengatakan saya benar-benar tidak melihat nilai dari menggunakan kari dalam contoh ini.
Setelah membaca jawaban dalam SO ini /programming/113780/javascript-curry-what-are-the-praktis-aplikasi saya masih tidak melihat manfaat dari menggunakannya.
Misalnya, jawaban skor tertinggi memberikan contoh konverter, tetapi contoh itu dapat ditulis ulang tanpa kari seperti yang ditunjukkan oleh jawaban lain.
Saya juga membaca jawaban. Apa keuntungan dari kari? (walaupun diskusi tidak terbatas pada javascript) Saya masih merasa bahwa versi kari dapat ditulis ulang tanpa kari (dalam js).
Jadi bisakah seseorang menunjukkan kepada saya keuntungan / manfaat "nyata" dari menggunakan kari dalam javascript?
---- perbarui ----
Kecuali untuk jawaban yang saya dapatkan, saya juga menemukan contoh log di sini menunjukkan manfaat menggunakannya.
for
loop dapat ditulis ulang sebagaiwhile
loop. Setiapif
pernyataan dapat ditulis ulang sebagai satuwhile
lingkaran. Setiapwhile
loop dapat ditulis ulang sebagaigoto
. Itu tidak berarti mereka tidak berguna.Jawaban:
Saya hampir tidak pernah menggunakan Currying sendiri, tapi inilah contoh terbaru yang terbukti bermanfaat. Saya mengkodekan untuk game Battlesnake , tetapi ini akan berlaku untuk banyak game. Mereka memberi Anda berbagai array, memberikan lokasi ular, ular musuh, dan makanan Anda. Katakanlah Anda mempertimbangkan untuk pindah ke titik {x, y} tertentu, dan Anda ingin memeriksa apakah itu mengandung ular, makanan, atau bahkan diri Anda sendiri. Lulus pertama adalah menulis kode seperti ini (saya akan menggunakan campuran fungsi dan panah ketinggalan jaman baru)
dan di suatu tempat dalam kode pergi
Tidak buruk, tetapi, karena Anda akan melakukan ini banyak banyak tempat dalam kode Anda, sedikit membosankan dan kikuk. Dan, dari pengalaman saya, mudah mengacaukan dua argumen. :-( Masalah mendasar adalah bahwa
some()
(ataufind()
) menerima fungsi mengambil hanya satu argumen, dan Anda benar-benar membutuhkan dua argumen , dua titik Jadi, Anda memikirkan currying Berikut banyak akan menggunakan panah, saya menemukan fungsi bersarang lebih jelas.!:Lalu, tes "is that food" Anda menjadi
Apakah ini akan menjadikan Anda seorang jutawan internet? Mungkin tidak. Tapi itu memang menyederhanakan, dan, dalam hal ini, memperjelas kode Anda.
sumber
Saya suka kari dalam contoh Anda tidak masuk akal. Untuk melihat fungsi currying, Anda harus menggabungkannya dengan fungsi urutan yang lebih tinggi: fungsi yang menggunakan fungsi lain sebagai parameter.
Contoh paling umum dari ini adalah memetakan, memfilter, dan mengurangi, meskipun situasi umum lainnya adalah panggilan balik. Saat Anda menerapkan fungsi secara parsial, Anda bisa meneruskan fungsi yang diterapkan sebagian ke fungsi-fungsi tingkat tinggi ini. Currying masuk akal ketika sebagian besar waktu Anda ingin menggunakan fungsi adalah untuk aplikasi parsial sehingga dapat diteruskan ke fungsi urutan lebih tinggi lainnya.
Contoh yang lebih ilustratif mungkin terlihat seperti ini:
Currying tidak pernah diperlukan, ya, karena Anda selalu dapat membuat fungsi anonim / panah dari fungsi biasa saat Anda membutuhkannya, tetapi dalam beberapa situasi mungkin sangat nyaman untuk memiliki fungsi kari dibandingkan dengan yang biasa (dan dalam situasi lain, itu hanya membuat hal-hal menjengkelkan dan lambat).
sumber
{}
, saya belum menemukan kelas Builder sangat berguna atau umum. Bisakah Anda mengutip beberapa contoh?Object.assign()
itu cukup mudah untuk bercabang dari konfigurasi dasar.