Currying dalam JavaScript melibatkan mengubah fungsi yang mengambil pelbagai argumen ke dalam urutan fungsi yang masing -masing mengambil satu hujah. Ini dicapai dengan mengembalikan fungsi baru dari fungsi asal, yang kemudiannya mengambil hujah seterusnya, dan sebagainya, sehingga semua argumen dibekalkan. Fungsi akhir dalam rantai kemudian melakukan pengiraan sebenar.
Terdapat beberapa cara untuk melaksanakan kari di JavaScript. Berikut adalah dua pendekatan biasa:
1. Menggunakan fungsi bersarang:
Ini adalah pendekatan mudah yang menggunakan fungsi bersarang untuk mengendalikan pengambilan hujah berurutan.
<code class="javascript">function curry(fn) { return function curried(...args) { if (args.length >= fn.length) { return fn(...args); } else { return (...nextArgs) => curried(...args, ...nextArgs); } }; } // Example usage: function add(a, b, c) { return abc; } const curriedAdd = curry(add); console.log(curriedAdd(1)(2)(3)); // Output: 6 console.log(curriedAdd(1,2)(3)); // Output: 6 console.log(curriedAdd(1)(2,3)); // Output: 6 console.log(curriedAdd(1,2,3)); // Output: 6</code>
2. Menggunakan reduce
:
Kaedah ini memanfaatkan fungsi reduce
secara teratur menggunakan hujah -hujah. Ia lebih ringkas tetapi mungkin kurang dibaca untuk pemula.
<code class="javascript">function curryReduce(fn) { const arity = fn.length; return (...args) => { if (args.length >= arity) { return fn(...args); } else { return (...nextArgs) => curryReduce(fn)(...args, ...nextArgs); } }; } // Example usage (same add function as above) const curriedAddReduce = curryReduce(add); console.log(curriedAddReduce(1)(2)(3)); // Output: 6</code>
Kedua-dua kaedah ini mencapai hasil yang sama: mengubah fungsi multi-argument ke dalam versi kari. Pilihan bergantung kepada keutamaan peribadi dan gaya kod. Pendekatan fungsi bersarang umumnya dianggap lebih mudah difahami.
Currying menawarkan beberapa kelebihan:
Ya, kari dapat meningkatkan kebolehbacaan dan kebolehkerjaan fungsi JavaScript anda, terutama dalam senario dengan pelbagai argumen. Dengan memecahkan fungsi yang besar ke dalam fungsi argumen yang lebih kecil, anda meningkatkan kejelasan kod dan mengurangkan kerumitan. Ini menjadikannya lebih mudah untuk memahami, menguji, dan debug bahagian individu fungsi. Modulariti yang lebih baik juga menyumbang kepada pemeliharaan yang lebih baik, kerana perubahan kepada satu bahagian fungsi kari kurang berkemungkinan memberi kesan kepada bahagian lain. Modulariti ini membolehkan refactoring yang lebih mudah dan mengurangkan risiko memperkenalkan pepijat. Selain itu, keupayaan untuk sebahagiannya menggunakan hujah memudahkan ujian dengan membolehkan anda menguji bahagian individu fungsi secara bebas.
Walaupun berkait rapat, aplikasi kari dan separa adalah konsep yang berbeza:
Perbezaan utama terletak pada bilangan argumen setiap langkah yang diterima. Currying sentiasa melibatkan fungsi argumen tunggal pada setiap langkah. Permohonan separa boleh menerima pelbagai argumen pada satu langkah. Currying adalah bentuk tertentu aplikasi separa. Anda boleh memikirkan kari sebagai aplikasi lengkap aplikasi separa di mana setiap langkah hanya mengambil satu hujah. Aplikasi separa adalah konsep yang lebih umum yang merangkumi kari sebagai kes khas.
Atas ialah kandungan terperinci Bagaimana saya melaksanakan kari dalam javascript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!