Rumah >hujung hadapan web >tutorial js >Currying: Membuka Kunci Kuasa Besar Modular JavaScript
Pernah melihat kod anda dan berfikir, "Wah, ini lebih teratur seperti laci stokin saya?" Nah, anda tidak bersendirian. JavaScript, untuk semua keanehan dan daya tarikannya, boleh menjadi kucar-kacir. Masukkan kari—teknik ajaib daripada pengaturcaraan berfungsi yang menjadikan kod anda modular, boleh diguna semula dan berani saya katakan, elegan. Jika ini terdengar seperti sihir, pasanglah. Kami akan menyelam.
Kari kedengaran seperti sesuatu yang anda akan lakukan di dapur, tetapi dalam JavaScript, ini adalah seni mengubah fungsi dengan berbilang argumen kepada urutan fungsi, masing-masing mengambil satu hujah. Anggap ia sebagai memecahkan resipi yang rumit kepada langkah-langkah bersaiz gigitan.
Ini contoh mudah:
function multiply(a: number, b: number) { return a * b; }
Sejuk kan? Tetapi fungsi ini menuntut kedua-dua hujah di muka. Jika anda tidak bersedia untuk komited kepada kedua-duanya (siapa sebenarnya?), kari membolehkan anda memanggilnya seperti ini:
const curriedMultiply = (a: number) => (b: number) => a * b; // Create reusable specialized functions const double = curriedMultiply(2); const triple = curriedMultiply(3); console.log(double(4)); // Output: 8 console.log(triple(4)); // Output: 12
Boom! Kini anda boleh meluluskan satu hujah pada satu masa, seperti memasang sandwic. Memandangkan anda telah melihat fungsi kari yang mudah, mari belajar cara membina satu langkah demi langkah.
Mulakan dengan Fungsi Pelbagai Hujah
Bayangkan anda mempunyai fungsi yang memerlukan beberapa hujah:
function add(a: number, b: number, c: number) { return a + b + c; }
Balut Dalam Lapisan
Ubah ia menjadi urutan fungsi:
const curriedAdd = (a: number) => (b: number) => (c: number) => a + b + c;
Luluskan Hujah Satu Persatu
Panggil setiap lapisan satu demi satu:
const step1 = curriedAdd(2); // Fixes the first argument (a = 2) const step2 = step1(3); // Fixes the second argument (b = 3) const result = step2(4); // Fixes the third argument (c = 4) console.log(result); // Output: 9
Untung daripada Fleksibiliti
Kini anda mempunyai langkah kecil yang boleh diguna semula yang menjadikan kod anda lebih modular.
Karipap mungkin kedengaran mewah, tetapi ia mempunyai faedah dunia nyata:
Mari kita luangkan sedikit masa untuk mengingati sebab kebolehbacaan penting. Kod bukan sahaja ditulis untuk mesin-mereka akan memahami apa sahaja yang anda lemparkan kepada mereka. Ia ditulis untuk manusia—rakan sekerja anda, diri masa depan anda dan orang seterusnya yang perlu mengubahnya. Kod yang baik harus bertujuan untuk mudah difahami, diuji dan diubah suai. Kari membantu mencapai matlamat ini dengan memecahkan logik kepada kepingan yang lebih kecil dan jelas yang masuk akal sepintas lalu.
Katakan anda sedang menapis senarai objek:
function multiply(a: number, b: number) { return a * b; }
Atau mengira cukai:
const curriedMultiply = (a: number) => (b: number) => a * b; // Create reusable specialized functions const double = curriedMultiply(2); const triple = curriedMultiply(3); console.log(double(4)); // Output: 8 console.log(triple(4)); // Output: 12
Setiap fungsi melakukan satu perkara, menjadikan kod anda lebih mudah dibaca, difahami dan diuji. Dengan mencipta fungsi yang lebih kecil dan khusus, kari menjadikan logik kompleks menjadi mudah, boleh digunakan semula dan boleh diselenggara untuk manusia yang akan mengusahakannya nanti.
Menaip semua fungsi bersarang tersebut secara manual? Tidak terima kasih. Mari mengautomasikan kari:
function add(a: number, b: number, c: number) { return a + b + c; }
Begini cara ia berfungsi:
Contoh:
const curriedAdd = (a: number) => (b: number) => (c: number) => a + b + c;
Ia seperti mesin layan diri untuk hujah: masukkan satu demi satu atau sekaligus.
Ambil kari ke peringkat seterusnya dengan keselamatan taip dalam TypeScript:
const step1 = curriedAdd(2); // Fixes the first argument (a = 2) const step2 = step1(3); // Fixes the second argument (b = 3) const result = step2(4); // Fixes the third argument (c = 4) console.log(result); // Output: 9
Contoh dengan TypeScript:
const filterByKey = (key: string) => (value: any) => (data: any[]) => data.filter((item) => item[key] === value); // Create a reusable filter for colors const filterByColor = filterByKey("color"); const redItems = filterByColor("red"); console.log(redItems([{ color: "red" }, { color: "blue" }])); // Output: [{ color: "red" }]
IDE anda akan membimbing anda setiap langkah.
Fungsi kari kehilangan konteks asalnya. Jika anda perlu menggunakan kaedah kelas dengan kari, gunakan fungsi .bind(this) atau anak panah.
Kari adalah seperti menaik taraf permainan pengekodan anda dengan kod cheat. Dengan memecahkan fungsi kepada bahagian yang lebih kecil dan boleh diurus, anda memperoleh fleksibiliti, kebolehbacaan dan rasa pencapaian (atau sekurang-kurangnya kurang sakit kepala penyahpepijatan). Sama ada anda mengautomasikannya atau menulisnya dengan tangan, kari mengubah kod anda menjadi kuasa modular yang bersih.
Seperti yang Haskell Curry (lelaki di sebalik nama itu) mungkin pernah berkata:
“Tulis lebih sedikit, lakukan lebih banyak… satu hujah pada satu masa!”
Atas ialah kandungan terperinci Currying: Membuka Kunci Kuasa Besar Modular JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!