Currying adalah teknik pengaturcaraan berfungsi yang mengubah fungsi yang mengambil pelbagai argumen ke dalam urutan fungsi, masing -masing mengambil satu hujah. Di JavaScript, kari boleh dilaksanakan secara manual atau dengan bantuan perpustakaan utiliti seperti Lodash atau Ramda.
Untuk memahami kari dalam JavaScript, pertimbangkan fungsi yang memerlukan dua parameter:
<code class="javascript">function add(a, b) { return ab; }</code>
Versi karier fungsi ini akan mengubahnya menjadi fungsi yang mengambil satu hujah dan mengembalikan fungsi lain yang mengambil hujah kedua:
<code class="javascript">function add(a) { return function(b) { return ab; }; }</code>
Anda boleh menggunakan fungsi ini seperti berikut:
<code class="javascript">const addFive = add(5); console.log(addFive(3)); // Output: 8</code>
Manfaat kari di JavaScript termasuk:
Pembalakan dengan konteks :
Currying boleh digunakan untuk membuat fungsi pembalakan dengan konteks tertentu. Sebagai contoh, anda mungkin mahu membuat logger yang awalan log dengan nama modul tertentu:
<code class="javascript">function logger(moduleName) { return function(message) { console.log(`[${moduleName}] ${message}`); }; } const userLogger = logger('User Module'); userLogger('User logged in'); // Output: [User Module] User logged in</code>
Pengendalian Acara :
Currying dapat memudahkan pengendalian acara dengan membolehkan anda membuat pengendali acara khusus. Sebagai contoh, anda mungkin ingin membuat pengendali yang mengemas kini keadaan komponen tertentu:
<code class="javascript">function updateState(component, newState) { return function(event) { component.setState(newState); }; } const button = document.getElementById('myButton'); const updateComponentState = updateState(myComponent, { isActive: true }); button.addEventListener('click', updateComponentState);</code>
Fungsi Pengesahan :
Currying boleh digunakan untuk membuat fungsi pengesahan yang boleh diguna semula dengan peraturan tertentu:
<code class="javascript">function greaterThan(min) { return function(value) { return value > min; }; } const validateAge = greaterThan(18); console.log(validateAge(20)); // Output: true console.log(validateAge(15)); // Output: false</code>
Currying dapat meningkatkan kebolehbacaan dan pemeliharaan kod JavaScript dalam beberapa cara:
Tandatangan fungsi yang lebih mudah :
Fungsi curried memecahkan fungsi kompleks ke dalam kepingan yang lebih kecil dan lebih mudah diurus. Ini boleh menjadikan tandatangan fungsi lebih mudah dan lebih mudah difahami.
<code class="javascript">// Without currying function complexFunction(a, b, c, d) { /* ... */ } // With currying function complexFunction(a) { return function(b) { return function(c) { return function(d) { /* ... */ }; }; }; }</code>
Kebolehgunaan semula kod yang lebih baik :
Dengan membenarkan aplikasi separa, kari memudahkan untuk menggunakan semula bahagian fungsi. Ini mengurangkan duplikasi kod dan meningkatkan kebolehkerjaan.
<code class="javascript">const addFive = add(5); const addTen = add(10);</code>
Komposisi kod yang lebih baik :
Currying memudahkan komposisi fungsi, yang boleh membawa kepada lebih banyak kod deklaratif dan boleh dibaca. Fungsi boleh digabungkan dengan cara yang mencerminkan aliran data melalui aplikasi anda.
<code class="javascript">const result = compose(addOne, multiplyByTwo)(5);</code>
Walaupun kari sendiri tidak sememangnya meningkatkan prestasi, ia boleh membawa kepada peningkatan prestasi dalam senario tertentu:
Memoisasi :
Currying boleh digabungkan dengan memoisasi, teknik di mana anda cache hasil panggilan fungsi dan mengembalikan hasil cache apabila input yang sama berlaku lagi. Ini dapat meningkatkan prestasi untuk fungsi yang dipanggil beberapa kali dengan hujah yang sama.
<code class="javascript">function memoize(fn) { const cache = {}; return function(...args) { const key = JSON.stringify(args); if (cache[key]) { return cache[key]; } const result = fn.apply(this, args); cache[key] = result; return result; }; } const memoizedAdd = memoize(add);</code>
addFive
dan addTen
di atas), anda membuat fungsi khusus ini hanya sekali daripada membuat fungsi tanpa nama baru setiap kali anda memerlukannya.Ringkasnya, semasa kari sendiri bukan pengoptimuman prestasi langsung, aplikasinya dalam kombinasi dengan teknik lain seperti memoisasi dan penciptaan fungsi yang cekap boleh membawa kepada penambahbaikan prestasi dalam aplikasi JavaScript.
Atas ialah kandungan terperinci Bagaimanakah kari bekerja di JavaScript, dan apakah faedahnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!