Pernah menemui "kari" dalam JavaScript dan tertanya-tanya tentang tujuannya? Catatan ini menyahmiskinkan kari, menggambarkan faedahnya dengan contoh mudah dan aplikasi praktikal yang meningkatkan kejelasan dan fleksibiliti kod.
Kari, teknik pengaturcaraan berfungsi, melibatkan pemprosesan argumen fungsi secara berurutan dan bukannya sekaligus. Fungsi kari menghasilkan fungsi lain, menunggu parameter seterusnya sehingga semua argumen dibekalkan. Pada asasnya, ia mengubah fungsi berbilang hujah menjadi urutan fungsi hujah tunggal.
Mari kita menggambarkan dengan analogi dan kod dunia sebenar:
Bayangkan memesan burger. Chef memasangnya selapis demi selapis:
Lapisan 1: Sanggul (hujah pertama) Lapisan 2: Patty (hujah kedua) Lapisan 3: Topping (hujah ketiga)
Begini cara ini diterjemahkan kepada kod menggunakan fungsi biasa dan kari:
? Fungsi Biasa: Semua bahan diluluskan serentak.
<code class="language-javascript">function makeBurger(bun, patty, topping) { return `Your burger includes: ${bun} bun, ${patty} patty, and ${topping} topping.`; } const myBurger = makeBurger("Sesame", "Beef", "Cheese"); console.log(myBurger); // Output: Your burger includes: Sesame bun, Beef patty, and Cheese topping.</code>
? Fungsi Kari: Bahan ditambah satu demi satu.
<code class="language-javascript">function makeBurgerCurried(bun) { return function (patty) { return function (topping) { return `Your burger includes: ${bun} bun, ${patty} patty, and ${topping} topping.`; }; }; } // Usage example const selectBun = makeBurgerCurried("Sesame"); const selectPatty = selectBun("Beef"); const myCurriedBurger = selectPatty("Cheese"); console.log(myCurriedBurger); // Output: Your burger includes: Sesame bun, Beef patty, and Cheese topping.</code>
✍️ Penjelasan:
Panggilan Pertama: makeBurgerCurried("Sesame")
menerima "Sesame" dan mengembalikan fungsi menanti patty.
Panggilan Kedua: selectBun("Beef")
menerima "Daging Lembu" dan mengembalikan fungsi menunggu topping.
Panggilan Ketiga: selectPatty("Cheese")
menerima "Keju", melengkapkan urutan dan mengembalikan perihalan burger.
Fungsi anak panah menawarkan pendekatan yang lebih ringkas:
<code class="language-javascript">const curriedArrow = (bun) => (patty) => (topping) => `Your burger includes: ${bun} bun, ${patty} patty, and ${topping} topping`; const myArrowBurger = curriedArrow("Sesame")("Beef")("Cheese"); console.log(myArrowBurger); // Your burger includes: Sesame bun, Beef patty, and Cheese topping</code>
Kari cemerlang dalam senario yang memerlukan penggunaan semula fungsi dengan hujah yang telah ditetapkan. Ia meningkatkan kebolehgunaan semula kod, kebolehbacaan dan modulariti.
Pertimbangkan platform e-dagang dengan diskaun berperingkat:
Mari kita bandingkan pelaksanaan fungsi biasa dan kari:
? Fungsi Biasa: Kurang fleksibel dan boleh digunakan semula.
<code class="language-javascript">function calculateDiscount(customerType, price) { if (customerType === "Regular") return price * 0.9; else if (customerType === "Premium") return price * 0.8; } console.log(calculateDiscount("Regular", 100)); // Output: 90 console.log(calculateDiscount("Premium", 100)); // Output: 80</code>
? Fungsi Kari: Sangat boleh digunakan semula dan boleh disesuaikan.
<code class="language-javascript">function createDiscountCalculator(discountRate) { return function (price) { return price * (1 - discountRate); }; } const regularDiscount = createDiscountCalculator(0.1); const premiumDiscount = createDiscountCalculator(0.2); console.log(regularDiscount(100)); // Output: 90 console.log(premiumDiscount(100)); // Output: 80 console.log(regularDiscount(200)); // Output: 180</code>
Menambah jenis pelanggan baharu adalah mudah:
<code class="language-javascript">const studentDiscount = createDiscountCalculator(0.15); console.log(studentDiscount(100)); // Output: 85</code>
Walaupun pada mulanya kelihatan rumit, kari memudahkan reka bentuk fungsi, meningkatkan kejelasan kod dan menggalakkan kebolehgunaan semula. Masukkan karipap ke dalam projek anda untuk merasai sendiri kelebihannya.
Kongsi pengalaman anda dengan kari dalam komen di bawah! Selamat mengekod! ✨
Atas ialah kandungan terperinci Memahami JavaScript Currying dengan Aplikasi Dunia Sebenar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!