Rumah > hujung hadapan web > tutorial js > Komposisi fungsi: Blok bangunan untuk kod yang boleh dipelihara

Komposisi fungsi: Blok bangunan untuk kod yang boleh dipelihara

Christopher Nolan
Lepaskan: 2025-02-17 11:19:09
asal
763 orang telah melayarinya

Function Composition: Building Blocks for Maintainable Code

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!

Function Composition: Building Blocks for Maintainable Code

Salah satu kelebihan pemikiran berfungsi adalah keupayaan untuk membina fungsi kompleks menggunakan fungsi tunggal yang kecil dan mudah difahami.

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 bersarang

Komposisi 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
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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:

function addOne(x) {
  return x + 1;
}
function timesTwo(x) {
  return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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:

// ...来自上面的先前函数定义
function addOneTimesTwo(x) {
  var holder = x;
  holder = addOne(holder);
  holder = timesTwo(holder);
  return holder;
}
console.log(addOneTimesTwo(3)); //8
console.log(addOneTimesTwo(4)); //10
Salin selepas log masuk
Salin selepas log masuk

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:

function addOne(x) {
  return x + 1;
}
function timesTwo(x) {
  return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Menggunakan fungsi gabungan yang sangat mudah ini, kita dapat membina dua fungsi kompleks sebelumnya dengan lebih mudah dan melihat hasil yang sama:

// ...来自上面的先前函数定义
function addOneTimesTwo(x) {
  var holder = x;
  holder = addOne(holder);
  holder = timesTwo(holder);
  return holder;
}
console.log(addOneTimesTwo(3)); //8
console.log(addOneTimesTwo(4)); //10
Salin selepas log masuk
Salin selepas log masuk

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:

function addOne(x) {
  return x + 1;
}
function timesTwo(x) {
  return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan