


Komposisi fungsi: Blok bangunan untuk kod yang boleh dipelihara
Feb 17, 2025 am 11:19 AM
JavaScript Function Gabungan: Membina lebih banyak kod yang boleh dipelihara
Komposisi fungsi JavaScript adalah teknik menggabungkan pelbagai fungsi mudah ke dalam satu fungsi yang lebih kompleks yang melakukan operasi subfungsi pada data tertentu dalam susunan logik. Perintah di mana fungsi digunakan menghasilkan hasil yang berbeza.Untuk menulis kod yang boleh dipelihara, adalah penting untuk memahami jenis pulangan setiap fungsi gabungan untuk memastikan fungsi seterusnya dapat mengendalikannya dengan betul. JavaScript tidak menghalang gabungan daripada fungsi yang kembali jenis yang tidak sesuai, jadi bahagian tanggungjawab ini jatuh pada pengaturcara.
Bagi mereka yang tidak biasa dengan paradigma pengaturcaraan berfungsi, menggabungkan fungsi boleh membuat kod kelihatan rumit. Walau bagaimanapun, dengan kemunculan sintaks ES2015, menggunakan fungsi anak panah, adalah mungkin untuk membuat fungsi gabungan mudah dalam satu baris kod tanpa memerlukan kaedah gabungan khas.
Fungsi gabungan mestilah fungsi tulen, yang bermaksud bahawa setiap kali nilai tertentu diserahkan kepada fungsi, fungsi harus mengembalikan hasil yang sama, dan fungsi tidak seharusnya mempunyai kesan sampingan untuk mengubah nilai luarannya sendiri. Ini akan menghasilkan kod yang lebih bersih dan lebih mudah dibaca.
Artikel ini dikaji semula oleh Jeff Mott, Dan Prince dan Sebastian Seitz. Terima kasih kepada semua pengulas rakan sebaya untuk mendapatkan kandungan SitePoint dengan sebaik -baiknya!
Tetapi kadang -kadang ini memerlukan pemikiran tentang masalah secara terbalik, tidak positif, untuk mengetahui cara membuat penyelesaian yang paling elegan. Dalam artikel ini, saya akan mengambil pendekatan langkah demi langkah untuk memeriksa gabungan fungsi dalam JavaScript dan menunjukkan bagaimana ia menghasilkan kod yang lebih mudah difahami dan mempunyai kesilapan yang lebih sedikit.
Fungsi bersarangKomposisi adalah teknik yang membolehkan anda menggabungkan dua atau lebih fungsi mudah ke dalam fungsi yang lebih kompleks yang melaksanakan setiap subfungsi pada sebarang data yang diluluskan dalam urutan logik. Untuk mendapatkan hasil ini, anda perlu bersarang satu fungsi yang lain dan mengulangi operasi fungsi luaran pada hasil fungsi dalaman sehingga hasilnya dihasilkan. Dan hasilnya mungkin berbeza -beza bergantung kepada susunan fungsi yang digunakan. Ini dapat ditunjukkan dengan mudah menggunakan teknik pengaturcaraan yang sudah kita ketahui dalam JavaScript dengan meluluskan panggilan fungsi sebagai parameter ke fungsi lain:
Dalam kes ini, kita menentukan fungsi addOne () untuk menambah 1 kepada nilai, dan fungsi timestwo () untuk membiak nilai sebanyak 2. Dengan meluluskan hasil satu fungsi sebagai hujah yang lain, kita dapat melihat bagaimana bersarang salah satu daripada mereka dalam yang lain menghasilkan hasil yang berbeza, walaupun nilai awal adalah sama. Fungsi dalaman dilaksanakan terlebih dahulu, dan hasilnya diserahkan kepada fungsi luar.
function addOne(x) { return x + 1; } function timesTwo(x) { return x * 2; } console.log(addOne(timesTwo(3))); //7 console.log(timesTwo(addOne(3))); //8
kombinasi penting
Jika anda ingin mengulangi urutan operasi yang sama, ia mungkin mudah untuk menentukan fungsi baru untuk menggunakan fungsi pertama dan kedua secara automatik. Ini mungkin kelihatan seperti ini: Dalam kes ini, kita secara manual menggabungkan kedua -dua fungsi bersama -sama dalam urutan tertentu. Kami membuat fungsi baru yang pertama memberikan nilai lulus kepada pemboleh ubah pemegang, kemudian mengemas kini nilai pembolehubah itu dengan melaksanakan fungsi pertama, diikuti dengan fungsi kedua, dan akhirnya mengembalikan nilai pemegang itu. (Perhatikan bahawa kami menggunakan pemboleh ubah yang dipanggil pemegang untuk sementara memegang nilai yang kami lalui. Untuk fungsi yang mudah, pembolehubah tempatan tambahan kelihatan berlebihan, tetapi walaupun dalam javascript yang penting, argumen ke fungsi akan diluluskan di dalamnya juga Kebiasaan yang baik untuk merawat nilai sebagai pemalar. Sebaliknya, perintah memohon kedua -dua fungsi yang lebih kecil ini, kita boleh melakukan perkara berikut: Sudah tentu, kod ini mula kelihatan sangat berulang. Dua fungsi gabungan baru kami hampir sama, kecuali kedua -dua fungsi yang lebih kecil yang mereka panggil mempunyai pesanan pelaksanaan yang berbeza. Kita perlu memudahkannya (seperti tidak mengulangi diri kita sendiri). Juga, menggunakan pembolehubah sementara yang mengubah nilai mereka seperti ini tidak begitu berfungsi, walaupun ia tersembunyi di dalam fungsi kombinatorial yang kita buat. Bottom line: Kita boleh melakukan yang lebih baik. Buat kombinasi fungsi mari kita buat fungsi kombinatorial yang memerlukan fungsi sedia ada dan menggabungkannya bersama mengikut urutan yang kita mahu. Untuk melakukan ini dengan cara yang konsisten tanpa perlu berurusan dengan butiran dalaman setiap kali, kita perlu memutuskan perintah di mana kita mahu lulus fungsi sebagai parameter. Kami mempunyai dua pilihan. Parameter akan menjadi fungsi, masing -masing, yang boleh dilaksanakan dari kiri ke kanan atau dari kanan ke kiri. Iaitu, menggunakan fungsi baru yang kami cadangkan, disusun (Timestwo, AddOne) boleh mewakili TimestWo (addOne ()) untuk membaca parameter dari kanan ke kiri, atau addOne (timestwo ()) untuk membaca parameter dari kiri ke kanan. Kelebihan melaksanakan parameter dari kiri ke kanan adalah bahawa mereka akan dibaca dengan cara yang sama dalam bahasa Inggeris, yang sangat serupa dengan bagaimana kami menamakan fungsi gabungan TimestWoadDone () untuk menyiratkan bahawa pendaraban harus berlaku sebelum penambahan. Kita semua tahu pentingnya penamaan logik untuk kod ringkas dan mudah dibaca. Kelemahan pelaksanaan parameter dari kiri ke kanan adalah bahawa nilai yang akan dikendalikan mesti diletakkan di depan. Walau bagaimanapun, meletakkan nilai di depan menjadikannya kurang mudah untuk menggabungkan fungsi yang dihasilkan dengan fungsi lain pada masa akan datang. Untuk menerangkan pemikiran di sebalik logik ini dengan baik, anda tidak boleh melampaui video klasik Brian Lonsdorf Hey Underscore, anda melakukan salah. (Walaupun harus diperhatikan bahawa kini garis bawah mempunyai pilihan FP yang dapat membantu menyelesaikan masalah pengaturcaraan fungsional yang dibincangkan oleh Brian ketika menggunakan garis bawah dengan perpustakaan pengaturcaraan berfungsi seperti Lodash-FP atau Ramda.) Bagaimanapun, kami benar-benar inginkan apa yang anda ingin DO adalah lulus pertama dalam semua data konfigurasi, dan akhirnya lulus dalam nilai yang anda mahu beroperasi. Oleh itu, adalah paling logik untuk menentukan fungsi gabungan kami sebagai membaca parameter mereka dan menggunakannya dari kanan ke kiri. Jadi kita boleh membuat fungsi gabungan asas yang kelihatan seperti ini: Menggunakan fungsi gabungan yang sangat mudah ini, kita dapat membina dua fungsi kompleks sebelumnya dengan lebih mudah dan melihat hasil yang sama: Walaupun fungsi kombinatorial mudah ini berfungsi, ia tidak menganggap banyak isu yang mengehadkan fleksibiliti dan kebolehgunaannya. Sebagai contoh, kami mungkin mahu menggabungkan lebih daripada dua fungsi. Selain itu, kami kehilangan maklumat ini dalam proses. Kita boleh menyelesaikan masalah ini, tetapi tidak perlu menguasai bagaimana kombinasi berfungsi. Daripada menulis sendiri, mewarisi kombinasi yang lebih kuat dari perpustakaan fungsional yang sedia ada seperti Ramda, secara lalai ia mengambil kira perintah parameter kanan ke kiri. jenis tanggungjawab anda Adalah penting untuk diingat bahawa ia adalah tanggungjawab pengaturcara untuk mengetahui jenis pulangan setiap fungsi gabungan supaya fungsi seterusnya dapat mengendalikannya dengan betul. Tidak seperti bahasa pengaturcaraan berfungsi tulen yang melakukan pemeriksaan jenis yang ketat, JavaScript tidak menghalang anda daripada cuba menggabungkan fungsi yang mengembalikan nilai -nilai jenis yang tidak sesuai. Anda tidak terhad kepada nombor lulus, tetapi tidak juga untuk mengekalkan jenis pembolehubah yang sama dari satu fungsi ke seterusnya. Tetapi anda bertanggungjawab untuk memastikan bahawa fungsi yang anda gabungkan sudah siap untuk memproses apa -apa nilai yang dikembalikan oleh fungsi sebelumnya. Pertimbangkan khalayak anda Sentiasa ingat bahawa orang lain mungkin perlu menggunakan atau mengubah suai kod anda pada masa akan datang. Menggunakan kombinasi dalam kod JavaScript tradisional boleh menjadi rumit bagi mereka yang tidak biasa dengan paradigma pengaturcaraan berfungsi. Matlamatnya adalah lebih mudah, lebih mudah dibaca dan mengekalkan kod. Walau bagaimanapun, dengan kemunculan sintaks ES2015, adalah mungkin untuk membuat fungsi gabungan mudah sebagai panggilan talian tunggal menggunakan fungsi anak panah tanpa memerlukan kaedah gabungan khas: mari mula menggabungkan hari ini Seperti semua teknik pengaturcaraan berfungsi, adalah penting untuk diingat bahawa fungsi gabungan anda harus menjadi fungsi murni. Ringkasnya, ini bermakna bahawa setiap kali nilai tertentu diserahkan kepada fungsi, fungsi harus mengembalikan hasil yang sama, dan fungsi itu tidak seharusnya mempunyai kesan sampingan untuk mengubah nilai luarannya sendiri. Gabungan bersarang sangat mudah apabila anda mempunyai satu set fungsi yang berkaitan yang anda ingin memohon kepada data anda, dan anda boleh memecahkan komponen fungsi itu ke dalam digunakan semula dan mudah untuk menggabungkan fungsi. Seperti semua teknik pengaturcaraan berfungsi, saya cadangkan menambah gabungan kepada kod anda yang sedia ada dengan berhati -hati untuk membiasakan diri dengannya. Jika anda melakukannya dengan betul, hasilnya akan lebih bersih, kering, dan lebih mudah dibaca kod. Bukankah ini yang kita mahukan? (berikut adalah FAQ, yang telah diselaraskan dan diselaraskan mengikut teks asal, dan maklumat pendua dielakkan) soalan yang sering ditanya mengenai kombinasi fungsi dan kod yang boleh dipelihara Apakah gabungan fungsi dalam pengaturcaraan? Kombinasi fungsi adalah konsep menggabungkan fungsi mudah ke dalam fungsi yang lebih kompleks. Anda boleh membuat fungsi yang kompleks dan berkuasa dengan fungsi -fungsi yang boleh diguna semula seperti ini seperti blok bangunan. Ini membantu menjadikan kod lebih mudah dibaca, lebih mudah dikekalkan, dan lebih berskala. Bagaimana gabungan fungsi mempromosikan kod yang boleh dipelihara? Kombinasi fungsi menggalakkan pemeliharaan dengan menggalakkan penggunaan fungsi kecil dan boleh diguna semula. Fungsi -fungsi ini lebih mudah difahami, menguji, dan debug. Apabila fungsi -fungsi kecil ini digabungkan untuk mewujudkan fungsi yang lebih kompleks, lebih mudah untuk menentukan dan menyelesaikan sebarang isu yang mungkin timbul. Pendekatan modular ini juga memudahkan untuk mengemas kini atau mengubahsuai bahagian -bahagian tertentu kod tanpa menjejaskan keseluruhan sistem. Apakah amalan terbaik untuk menulis kod yang boleh dipelihara? Menulis kod yang boleh dipelihara melibatkan beberapa amalan terbaik, termasuk: Memelihara fungsi kecil dan memberi tumpuan kepada satu tugas; struktur. Apakah hubungan antara kombinasi fungsi dan pengaturcaraan berfungsi? Kombinasi fungsi adalah konsep asas dalam pengaturcaraan berfungsi. Pengaturcaraan fungsional adalah contoh merawat pengiraan sebagai penilaian fungsi matematik dan mengelakkan perubahan keadaan dan data yang berubah -ubah. Dalam paradigma ini, kombinasi fungsi memainkan peranan penting dalam membina fungsi yang lebih kompleks dari fungsi yang lebih mudah, dengan itu meningkatkan kebolehgunaan dan mengekalkan kod. Apakah cabaran melaksanakan kombinasi fungsi? Kombinasi fungsi mempunyai banyak manfaat, tetapi mereka juga boleh membawa cabaran. Salah satu cabaran ialah jika tidak diuruskan dengan betul, ia boleh menyebabkan sukar untuk membaca kod, terutamanya apabila menggabungkan pelbagai fungsi. Kesilapan dan pengecualian dalam rangkaian fungsi gabungan juga boleh menjadi sukar. Walau bagaimanapun, cabaran -cabaran ini dapat dikurangkan dengan amalan pengekodan yang baik dan penggunaan kombinasi fungsi yang betul. Bagaimana untuk meningkatkan ujian kod dengan kombinasi fungsi? Kombinasi fungsi boleh menjadikan ujian kod lebih mudah dan lebih cekap. Oleh kerana fungsi gabungan terdiri daripada fungsi yang lebih kecil, bebas, anda boleh menguji setiap fungsi kecil secara berasingan. Ini menjadikannya lebih mudah untuk mengasingkan dan memperbaiki pepijat. Ia juga memudahkan amalan ujian unit, di mana setiap bahagian perisian diuji secara individu untuk memastikan ia berfungsi dengan baik. Atas ialah kandungan terperinci Komposisi fungsi: Blok bangunan untuk kod yang boleh dipelihara. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!function addOne(x) {
return x + 1;
}
function timesTwo(x) {
return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8
// ...來(lái)自上面的先前函數(shù)定義
function addOneTimesTwo(x) {
var holder = x;
holder = addOne(holder);
holder = timesTwo(holder);
return holder;
}
console.log(addOneTimesTwo(3)); //8
console.log(addOneTimesTwo(4)); //10
function addOne(x) {
return x + 1;
}
function timesTwo(x) {
return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8
// ...來(lái)自上面的先前函數(shù)定義
function addOneTimesTwo(x) {
var holder = x;
holder = addOne(holder);
holder = timesTwo(holder);
return holder;
}
console.log(addOneTimesTwo(3)); //8
console.log(addOneTimesTwo(4)); //10
function addOne(x) {
return x + 1;
}
function timesTwo(x) {
return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Mekanisme pengumpulan sampah JavaScript secara automatik menguruskan memori melalui algoritma pembersihan tag untuk mengurangkan risiko kebocoran ingatan. Enjin melintasi dan menandakan objek aktif dari objek akar, dan tidak bertanda dianggap sebagai sampah dan dibersihkan. Sebagai contoh, apabila objek tidak lagi dirujuk (seperti menetapkan pembolehubah kepada null), ia akan dikeluarkan dalam pusingan seterusnya kitar semula. Punca kebocoran memori yang biasa termasuk: ① Pemasa atau pendengar peristiwa yang tidak jelas; ② Rujukan kepada pembolehubah luaran dalam penutupan; ③ Pembolehubah global terus memegang sejumlah besar data. Enjin V8 mengoptimumkan kecekapan kitar semula melalui strategi seperti kitar semula generasi, penandaan tambahan, kitar semula selari/serentak, dan mengurangkan masa menyekat benang utama. Semasa pembangunan, rujukan global yang tidak perlu harus dielakkan dan persatuan objek harus dihiasi dengan segera untuk meningkatkan prestasi dan kestabilan.

Terdapat tiga cara biasa untuk memulakan permintaan HTTP dalam node.js: Gunakan modul terbina dalam, axios, dan nod-fetch. 1. Gunakan modul HTTP/HTTPS terbina dalam tanpa kebergantungan, yang sesuai untuk senario asas, tetapi memerlukan pemprosesan manual jahitan data dan pemantauan ralat, seperti menggunakan https.get () untuk mendapatkan data atau menghantar permintaan pos melalui .write (); 2.AXIOS adalah perpustakaan pihak ketiga berdasarkan janji. Ia mempunyai sintaks ringkas dan fungsi yang kuat, menyokong async/menunggu, penukaran JSON automatik, pemintas, dan lain -lain. Adalah disyorkan untuk memudahkan operasi permintaan tak segerak; 3.Node-Fetch menyediakan gaya yang serupa dengan pengambilan penyemak imbas, berdasarkan janji dan sintaks mudah

Jenis data JavaScript dibahagikan kepada jenis primitif dan jenis rujukan. Jenis primitif termasuk rentetan, nombor, boolean, null, undefined, dan simbol. Nilai -nilai tidak berubah dan salinan disalin apabila memberikan nilai, jadi mereka tidak mempengaruhi satu sama lain; Jenis rujukan seperti objek, tatasusunan dan fungsi menyimpan alamat memori, dan pembolehubah menunjuk objek yang sama akan mempengaruhi satu sama lain. Typeof dan Instanceof boleh digunakan untuk menentukan jenis, tetapi memberi perhatian kepada isu -isu sejarah TypeOfNull. Memahami kedua -dua jenis perbezaan ini dapat membantu menulis kod yang lebih stabil dan boleh dipercayai.

Helo, pemaju JavaScript! Selamat datang ke berita JavaScript minggu ini! Minggu ini kami akan memberi tumpuan kepada: Pertikaian tanda dagangan Oracle dengan Deno, objek masa JavaScript baru disokong oleh pelayar, kemas kini Google Chrome, dan beberapa alat pemaju yang kuat. Mari mulakan! Pertikaian tanda dagangan Oracle dengan percubaan Deno Oracle untuk mendaftarkan tanda dagangan "JavaScript" telah menyebabkan kontroversi. Ryan Dahl, pencipta Node.js dan Deno, telah memfailkan petisyen untuk membatalkan tanda dagangan, dan dia percaya bahawa JavaScript adalah standard terbuka dan tidak boleh digunakan oleh Oracle

Rangka kerja JavaScript mana yang terbaik? Jawapannya ialah memilih yang paling sesuai mengikut keperluan anda. 1. REACT adalah fleksibel dan bebas, sesuai untuk projek sederhana dan besar yang memerlukan penyesuaian tinggi dan keupayaan seni bina pasukan; 2. Angular menyediakan penyelesaian lengkap, sesuai untuk aplikasi peringkat perusahaan dan penyelenggaraan jangka panjang; 3. Vue mudah digunakan, sesuai untuk projek kecil dan sederhana atau perkembangan pesat. Di samping itu, sama ada terdapat timbunan teknologi sedia ada, saiz pasukan, kitaran hayat projek dan sama ada SSR diperlukan juga faktor penting dalam memilih rangka kerja. Singkatnya, tidak ada kerangka terbaik, pilihan terbaik adalah yang sesuai dengan keperluan anda.

IIFE (Segera Dilanjutkan FunctionExpression) adalah ekspresi fungsi yang dilaksanakan dengan segera selepas definisi, digunakan untuk mengasingkan pembolehubah dan mengelakkan mencemarkan skop global. Ia dipanggil dengan membungkus fungsi dalam kurungan untuk menjadikannya ungkapan dan sepasang kurungan segera diikuti olehnya, seperti (fungsi () {/code/}) ();. Penggunaan terasnya termasuk: 1. Elakkan konflik berubah -ubah dan mencegah pertindihan penamaan antara skrip berganda; 2. Buat skop peribadi untuk menjadikan pembolehubah dalaman tidak kelihatan; 3. Kod modular untuk memudahkan permulaan tanpa mendedahkan terlalu banyak pembolehubah. Kaedah penulisan biasa termasuk versi yang diluluskan dengan parameter dan versi fungsi anak panah ES6, tetapi perhatikan bahawa ungkapan dan ikatan mesti digunakan.

Janji adalah mekanisme teras untuk mengendalikan operasi tak segerak dalam JavaScript. Memahami panggilan rantaian, pengendalian ralat dan gabungan adalah kunci untuk menguasai aplikasi mereka. 1. Panggilan rantai mengembalikan janji baru melalui .then () untuk merealisasikan persamaan proses tak segerak. Setiap .then () menerima hasil sebelumnya dan boleh mengembalikan nilai atau janji; 2. Pengendalian ralat harus menggunakan .catch () untuk menangkap pengecualian untuk mengelakkan kegagalan senyap, dan boleh mengembalikan nilai lalai dalam tangkapan untuk meneruskan proses; 3. Gabungan seperti janji.all () (berjaya hanya berjaya selepas semua kejayaan), janji.race () (penyempurnaan pertama dikembalikan) dan janji.allsettled () (menunggu semua penyelesaian)

CACHEAPI adalah alat yang disediakan oleh penyemak imbas kepada permintaan rangkaian cache, yang sering digunakan bersempena dengan ServiceWorker untuk meningkatkan prestasi laman web dan pengalaman luar talian. 1. Ia membolehkan pemaju menyimpan sumber secara manual seperti skrip, helaian gaya, gambar, dan lain -lain; 2. Ia boleh memadankan tindak balas cache mengikut permintaan; 3. Ia menyokong memotong cache tertentu atau membersihkan seluruh cache; 4. Ia boleh melaksanakan keutamaan cache atau strategi keutamaan rangkaian melalui perkhidmatan pekerja yang mendengar acara mengambil; 5. Ia sering digunakan untuk sokongan luar talian, mempercepat kelajuan akses berulang, sumber utama dan kandungan kemas kini latar belakang; 6. Apabila menggunakannya, anda perlu memberi perhatian kepada kawalan versi cache, sekatan penyimpanan dan perbezaan dari mekanisme caching HTTP.
