mata teras
- Pengaturcaraan fungsional adalah paradigma pengaturcaraan yang menekankan invarians, fungsi kelas pertama, ketelusan kutipan dan fungsi tulen. Ia membantu menulis kod elegan, diselenggarakan, berskala, boleh diramal.
- Prinsip teras pengaturcaraan berfungsi termasuk fungsi tulen (fungsi tanpa kesan sampingan atau operasi yang tidak berkaitan dengan output fungsi), invarians (tiada pengubahsuaian langsung data), fungsi kelas pertama (fungsi boleh digunakan seperti nilai lain ) dan fungsi pesanan tinggi (fungsi yang mengambil fungsi sebagai satu atau lebih parameternya, atau fungsi yang mengembalikan fungsi).
- Pengaturcaraan berfungsi menjana kod modular, yang lebih mudah untuk debug dan ujian. Oleh kerana panggilan fungsi boleh diedarkan di seluruh teras, ia juga dapat meningkatkan kecekapan pengiraan.
- Prinsip pengaturcaraan berfungsi boleh dimasukkan ke dalam mana-mana bahasa pengaturcaraan dan digunakan bersamaan dengan gaya pengaturcaraan lain seperti pengaturcaraan berorientasikan objek. Walaupun mereka tidak digunakan semata -mata, mereka boleh menghasilkan hasil positif dalam kod.
Pengaturcaraan berfungsi adalah paradigma atau gaya yang menekankan invarians, fungsi kelas pertama, ketelusan kutipan dan fungsi tulen. Sekiranya anda tidak memahami makna kata -kata ini, jangan risau! Kami akan memecahkan semua istilah ini dalam artikel ini.
Pengaturcaraan berfungsi berasal dari kalkulus λ, sistem matematik yang berkisar sekitar abstraksi dan penyebaran fungsi. Oleh itu, banyak bahasa pengaturcaraan berfungsi kelihatan sangat matematik. Tetapi berita baiknya ialah: anda tidak perlu menggunakan bahasa pengaturcaraan berfungsi untuk memohon prinsip pengaturcaraan fungsional ke kod anda. Dalam jawatan ini, kami akan menggunakan JavaScript, yang mempunyai banyak ciri yang menjadikannya sesuai untuk pengaturcaraan berfungsi tanpa terhad kepada paradigma itu.
Prinsip teras pengaturcaraan berfungsi
Sekarang kita telah membincangkan pengaturcaraan berfungsi, mari kita bincangkan prinsip teras di belakang FP.fungsi tulen
Saya suka memikirkan fungsi sebagai mesin - mereka menerima input atau parameter dan kemudian mengeluarkan sesuatu, iaitu nilai pulangan. Fungsi tulen tidak mempunyai "kesan sampingan" atau operasi yang bebas daripada output fungsi. Sesetengah kesan sampingan yang berpotensi termasuk nilai percetakan atau merakamnya dengan
, atau memanipulasi pembolehubah di luar fungsi. console.log
let number = 2; function squareNumber() { number = number * number; // 非純操作:操作函數(shù)外部的變量 console.log(number); // 非純操作:控制臺記錄值 return number; } squareNumber();Fungsi berikut adalah fungsi tulen. Ia menerima input dan menghasilkan output.
let number = 2; function squareNumber() { number = number * number; // 非純操作:操作函數(shù)外部的變量 console.log(number); // 非純操作:控制臺記錄值 return number; } squareNumber();
fungsi tulen berjalan secara bebas dari negeri di luar fungsi, jadi mereka tidak seharusnya bergantung kepada keadaan global atau pembolehubah di luar diri mereka. Dalam contoh pertama, kami menggunakan pembolehubah number
yang dibuat di luar fungsi dan menetapkannya di dalam fungsi. Ini melanggar prinsip ini. Sekiranya anda sangat bergantung pada perubahan pembolehubah global, kod anda tidak dapat diramalkan dan sukar untuk dijejaki. Ia akan menjadi lebih sukar untuk mengetahui di mana ralat berlaku dan mengapa nilai berubah. Sebaliknya, debugging lebih mudah dengan hanya input, output, dan fungsi pembolehubah tempatan.
Di samping itu, fungsi harus mengikuti ketelusan rujukan , yang bermaksud bahawa diberikan input, output mereka akan selalu sama. Dalam fungsi contoh di atas, jika saya lulus 2 ke fungsi, ia akan sentiasa kembali 4. Ini tidak berlaku dengan panggilan API atau menjana nombor rawak, ini hanya dua contoh. Memandangkan input yang sama, output mungkin atau tidak boleh dikembalikan.
// 純函數(shù) function squareNumber(number) { return number * number; } squareNumber(2);
Invariance
Pengaturcaraan fungsi juga mengutamakan Invariability , iaitu, tiada data diubahsuai secara langsung. Invariance membawa ramalan - anda tahu nilai data, dan mereka tidak akan berubah. Ia menjadikan kod mudah, boleh diuji, dan berjalan pada sistem yang diedarkan dan multithreaded.
Invariance sering memainkan peranan apabila kita bekerja dengan struktur data. Banyak kaedah array dalam JavaScript secara langsung mengubah suai tatasusunan. Sebagai contoh, .pop()
memadam item secara langsung dari akhir array, sementara .splice()
membolehkan anda mendapatkan sebahagian daripada array. Sebaliknya, dalam paradigma berfungsi, kami akan menyalin array dan memadam unsur -unsur yang kami mahu menghapuskan dalam proses.
// 不具有引用透明性 Math.random(); // 0.1406399143589343 Math.random(); // 0.26768924082159495
// 我們直接修改 myArr const myArr = [1, 2, 3]; myArr.pop(); // [1, 2]
Fungsi kelas pertama
Dalam pengaturcaraan berfungsi, fungsi kami adalah fungsi kelas pertama, yang bermaksud kita boleh menggunakannya seperti nilai lain. Kita boleh membuat tatasusunan fungsi, lulus mereka sebagai hujah kepada fungsi lain, dan menyimpannya dalam pembolehubah.
// 我們復(fù)制數(shù)組而不包含最后一個元素,并將其存儲到變量中 let myArr = [1, 2, 3]; let myNewArr = myArr.slice(0, 2); // [1, 2] console.log(myArr);
Fungsi Pesanan Lanjutan
Fungsi pesanan yang lebih tinggi adalah fungsi yang melaksanakan satu daripada dua operasi: mereka sama ada mengambil fungsi sebagai satu atau lebih parameternya atau mengembalikan fungsi tersebut. JavaScript telah membina banyak fungsi pesanan tinggi kelas pertama-seperti map
, reduce
dan filter
, kita boleh menggunakannya untuk berinteraksi dengan tatasusunan.
filter
digunakan untuk mengembalikan array baru dari array lama yang mengandungi hanya nilai yang memenuhi syarat yang kami sediakan.
let myFunctionArr = [() => 1 + 2, () => console.log("hi"), x => 3 * x]; myFunctionArr[2](2); // 6 const myFunction = anotherFunction => anotherFunction(20); const secondFunction = x => x * 10; myFunction(secondFunction); // 200
map
digunakan untuk melangkah ke atas item dalam array dan mengubah suai setiap item mengikut logik yang disediakan. Dalam contoh berikut, kami menggandakan setiap item dalam array dengan meluluskan fungsi yang menguburkan nilai kami dengan 2 hingga map
.
const myArr = [1, 2, 3, 4, 5]; const evens = myArr.filter(x => x % 2 === 0); // [2, 4]
reduce
membolehkan kita mengeluarkan nilai tunggal berdasarkan array input - biasanya digunakan untuk jumlah, array rata -rata, atau nilai kumpulan dalam beberapa cara.
const myArr = [1, 2, 3, 4, 5]; const doubled = myArr.map(i => i * 2); // [2, 4, 6, 8, 10]
Anda juga boleh melaksanakan fungsi ini sendiri! Sebagai contoh, anda boleh membuat fungsi filter
seperti ini:
const myArr = [1, 2, 3, 4, 5]; const sum = myArr.reduce((i, runningSum) => i + runningSum); // 15
Jenis kedua fungsi pesanan tinggi (fungsi yang mengembalikan fungsi lain) juga corak yang agak kerap. Contohnya: Anda juga mungkin berminat dengan kari, jadi anda boleh membacanya! Kombinasi fungsi adalah untuk menggabungkan pelbagai fungsi mudah untuk mewujudkan fungsi yang lebih kompleks. Oleh itu, anda boleh mempunyai fungsi Kelebihan Pengaturcaraan berfungsi menjana kod modular. Anda mempunyai sebilangan kecil fungsi yang boleh anda gunakan berulang kali. Memahami fungsi khusus setiap fungsi bermakna ia harus mudah untuk menentukan kesilapan dan menulis ujian, terutamanya jika output fungsi harus diramalkan. Juga, jika anda cuba menggunakan beberapa teras, anda boleh mengedarkan panggilan fungsi ke teras tersebut, supaya dapat meningkatkan kecekapan pengiraan. Bagaimana menggunakan pengaturcaraan berfungsi? Anda tidak perlu beralih sepenuhnya kepada pengaturcaraan berfungsi untuk mengintegrasikan semua idea ini. Anda juga boleh menggunakan banyak idea dengan pengaturcaraan berorientasikan objek, yang sering dianggap sebagai saingan mereka. Sebagai contoh, React menggabungkan banyak prinsip berfungsi, seperti keadaan yang tidak berubah, tetapi telah menggunakan sintaks kelas terutamanya selama bertahun -tahun. Ia juga boleh dilaksanakan dalam hampir mana -mana bahasa pengaturcaraan - anda tidak perlu menulis Clojure atau Haskell melainkan anda benar -benar mahu. Walaupun anda bukan prinsip pengaturcaraan fungsional, fungsional dapat menghasilkan hasil positif dalam kod anda. soalan yang sering ditanya mengenai pengaturcaraan fungsi Pengaturcaraan berfungsi berdasarkan beberapa prinsip utama. Pertama adalah invarians, yang bermaksud bahawa apabila pembolehubah ditetapkan, ia tidak boleh diubah. Ini menghapuskan kesan sampingan dan menjadikan kod lebih mudah difahami. Prinsip kedua adalah fungsi tulen, yang bermaksud bahawa output fungsi hanya ditentukan oleh inputnya, tanpa sebarang input atau output tersembunyi. Prinsip ketiga adalah fungsi kelas pertama, yang bermaksud bahawa fungsi boleh digunakan sebagai input atau output ke fungsi lain. Ini membolehkan fungsi pesanan lebih tinggi dan menjadikan kod lebih ringkas dan mudah difahami. Perbezaan utama antara pengaturcaraan fungsional dan prosedur adalah cara mereka memproses data dan keadaan. Dalam pengaturcaraan prosedur, negara -negara program disimpan dalam pembolehubah dan boleh diubah dari masa ke masa. Dalam pengaturcaraan berfungsi, keadaan tidak berubah, tetapi mewujudkan keadaan baru dari keadaan yang ada. Ini menjadikan pengaturcaraan berfungsi lebih mudah untuk meramalkan dan debug kerana tidak ada kesan sampingan untuk dibimbangkan. Pengaturcaraan berfungsi menyediakan banyak manfaat. Ia boleh menjadikan kod lebih mudah dibaca dan difahami kerana ia mengelakkan kesan sampingan dan keadaan yang boleh berubah. Ia juga menjadikan kod itu lebih dipercayai, kerana ia menggalakkan penggunaan fungsi tulen yang selalu menghasilkan output yang sama untuk input yang sama. Di samping itu, pengaturcaraan berfungsi boleh menjadikan kod lebih mudah untuk diuji dan debug kerana fungsi boleh diuji secara berasingan. Walaupun pengaturcaraan berfungsi mempunyai banyak faedah, ia juga mempunyai beberapa cabaran. Ia sukar untuk dipelajari, terutamanya bagi orang yang terbiasa dengan pengaturcaraan prosedur atau berorientasikan objek. Melaksanakan algoritma tertentu dalam gaya berfungsi juga boleh menjadi lebih sukar. Tambahan pula, pengaturcaraan berfungsi kadang -kadang membawa kepada kod yang kurang cekap, kerana ia sering melibatkan membuat objek baru dan bukannya mengubah objek sedia ada. Banyak bahasa pengaturcaraan menyokong pengaturcaraan berfungsi sedikit sebanyak. Sesetengah bahasa, seperti Haskell dan Erlang, berfungsi semata-mata, sementara yang lain, seperti JavaScript dan Python, adalah bahasa multi-paradigma yang menyokong pengaturcaraan berfungsi dan paradigma lain. Malah bahasa secara tradisional tidak berkaitan dengan pengaturcaraan berfungsi, seperti Java dan C, telah menambah fungsi untuk menyokong pengaturcaraan berfungsi pada tahun -tahun kebelakangan ini. Dalam pengaturcaraan berfungsi, elakkan kesan sampingan sebanyak mungkin. Ini dilakukan dengan menggunakan fungsi tulen yang tidak mengubah mana -mana negeri atau melaksanakan sebarang operasi I/O. Apabila kesan sampingan diperlukan, mereka terpencil dan dikawal. Sebagai contoh, dalam Haskell, kesan sampingan dirawat dengan monad, yang merangkumi kesan sampingan dan menyediakan cara untuk menghubungkan mereka bersama -sama dengan cara yang terkawal. Fungsi pesanan yang lebih tinggi adalah fungsi yang mengambil satu atau lebih fungsi sebagai parameter, mengembalikan fungsi sebagai hasilnya, atau melakukan kedua-dua operasi pada masa yang sama. Fungsi pesanan maju adalah ciri utama pengaturcaraan berfungsi kerana ia membenarkan fungsi digunakan sebagai data. Ini boleh membawa kepada kod yang lebih bersih dan lebih ekspresif. rekursi adalah teknik di mana fungsi memanggil dirinya dalam definisi sendiri. Dalam pengaturcaraan fungsional, rekursi sering digunakan sebagai pengganti gelung kerana gelung melibatkan keadaan yang boleh berubah, yang dielakkan dalam pengaturcaraan berfungsi. Rekursi boleh digunakan untuk menyelesaikan pelbagai masalah, dari mengira faktorial untuk melintasi pokok. Currying adalah teknik dalam pengaturcaraan berfungsi di mana fungsi dengan pelbagai parameter ditukar menjadi satu siri fungsi, setiap fungsi hanya mempunyai satu parameter. Ini membolehkan sebahagian daripada fungsi digunakan, di mana satu fungsi terpakai kepada beberapa parameternya dan mengembalikan fungsi baru yang mengambil seluruh parameter. Pengaturcaraan Reaktif Fungsi (FRP) adalah paradigma pengaturcaraan yang menggabungkan pengaturcaraan fungsional dan reaktif. Dalam FRP, negara -negara program dimodelkan sebagai satu siri nilai yang tidak berubah yang berbeza dari masa ke masa, dan fungsi digunakan untuk mengubah dan menggabungkan nilai -nilai ini. Ini menjadikannya lebih mudah untuk membuat alasan mengenai program yang tidak segerak dan didorong oleh peristiwa kerana ia mengelakkan keadaan dan kesan sampingan yang boleh dimusnahkan. Atas ialah kandungan terperinci Apakah pengaturcaraan berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!let number = 2;
function squareNumber() {
number = number * number; // 非純操作:操作函數(shù)外部的變量
console.log(number); // 非純操作:控制臺記錄值
return number;
}
squareNumber();
Gabungan fungsi
averageArray
yang menggabungkan fungsi purata dengan fungsi jumlah yang merangkumi nilai array. Fungsi individu adalah kecil dan boleh diulang untuk tujuan lain dan digabungkan bersama untuk melakukan kerja yang lebih lengkap. // 純函數(shù)
function squareNumber(number) {
return number * number;
}
squareNumber(2);
Apakah prinsip utama pengaturcaraan berfungsi?
Apakah perbezaan antara pengaturcaraan fungsional dan pengaturcaraan prosedur?
Apakah kelebihan pengaturcaraan berfungsi?
Apakah cabaran pengaturcaraan berfungsi?
Bahasa apa yang menyokong pengaturcaraan berfungsi?
Bagaimana menangani kesan sampingan dalam pengaturcaraan berfungsi?
Apakah fungsi pesanan yang lebih tinggi dalam pengaturcaraan berfungsi?
Apakah rekursi dalam pengaturcaraan berfungsi?
Apa yang dikurangkan dalam pengaturcaraan berfungsi?
Apakah pengaturcaraan reaktif berfungsi?

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

Java dan JavaScript adalah bahasa pengaturcaraan yang berbeza, masing -masing sesuai untuk senario aplikasi yang berbeza. Java digunakan untuk pembangunan aplikasi perusahaan dan mudah alih yang besar, sementara JavaScript digunakan terutamanya untuk pembangunan laman web.

JavaScriptcommentsareessentialformaintaining,reading,andguidingcodeexecution.1)Single-linecommentsareusedforquickexplanations.2)Multi-linecommentsexplaincomplexlogicorprovidedetaileddocumentation.3)Inlinecommentsclarifyspecificpartsofcode.Bestpractic

Titik berikut harus diperhatikan apabila tarikh pemprosesan dan masa di JavaScript: 1. Terdapat banyak cara untuk membuat objek tarikh. Adalah disyorkan untuk menggunakan rentetan format ISO untuk memastikan keserasian; 2. Dapatkan dan tetapkan maklumat masa boleh diperoleh dan tetapkan kaedah, dan ambil perhatian bahawa bulan bermula dari 0; 3. Tarikh pemformatan secara manual memerlukan rentetan, dan perpustakaan pihak ketiga juga boleh digunakan; 4. Adalah disyorkan untuk menggunakan perpustakaan yang menyokong zon masa, seperti Luxon. Menguasai perkara -perkara utama ini secara berkesan dapat mengelakkan kesilapan yang sama.

JavaScriptispreferredforwebdevelopment, whersjavaisbetterforlarge-scalebackendsystemsandandroidapps.1) javascriptexcelsinceleatinginteractiveWebexperienceswithitsdynamicnatureanddommanipulation.2) javaoffersstrongyblectionandobjection

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavascripthassevenfundamentalDatypes: nombor, rentetan, boolean, undefined, null, objek, andsymbol.1) numberuseadouble-precisionformat, bergunaforwidevaluangesbutbecautiouswithfloating-pointarithmetic.2)

Penangkapan dan gelembung acara adalah dua peringkat penyebaran acara di Dom. Tangkap adalah dari lapisan atas ke elemen sasaran, dan gelembung adalah dari elemen sasaran ke lapisan atas. 1. Penangkapan acara dilaksanakan dengan menetapkan parameter useCapture addeventlistener kepada benar; 2. Bubble acara adalah tingkah laku lalai, useCapture ditetapkan kepada palsu atau ditinggalkan; 3. Penyebaran acara boleh digunakan untuk mencegah penyebaran acara; 4. Acara menggelegak menyokong delegasi acara untuk meningkatkan kecekapan pemprosesan kandungan dinamik; 5. Penangkapan boleh digunakan untuk memintas peristiwa terlebih dahulu, seperti pemprosesan pembalakan atau ralat. Memahami kedua -dua fasa ini membantu mengawal masa dan bagaimana JavaScript bertindak balas terhadap operasi pengguna.

Java dan JavaScript adalah bahasa pengaturcaraan yang berbeza. 1.Java adalah bahasa yang ditaip dan disusun secara statik, sesuai untuk aplikasi perusahaan dan sistem besar. 2. JavaScript adalah jenis dinamik dan bahasa yang ditafsirkan, terutamanya digunakan untuk interaksi web dan pembangunan front-end.
