cari
Rumahhujung hadapan webtutorial jsPengenalan kepada pengaturcaraan fungsional yang murni

3

Takeaways Key An Introduction to Reasonably Pure Functional Programming

Fungsi tulen adalah penting dalam pengaturcaraan fungsional kerana mereka mengembalikan output yang sama untuk input yang sama tanpa menyebabkan kesan sampingan, meningkatkan kebolehprediksi dan kebolehlaksanaan. Pengenalan kepada pengaturcaraan fungsional yang murni

Pengaturcaraan berfungsi mengurangkan kerumitan program dengan memecahkan proses ke dalam fungsi yang lebih mudah dan tidak berubah, yang membantu dalam meminimumkan pepijat dan meningkatkan kebolehbacaan kod.

over-abstraction dalam pengaturcaraan berfungsi, sambil mengurangkan kerumitan kod, boleh menyebabkan kod yang sukar difahami dan diselenggarakan, menonjolkan kepentingan keseimbangan.

Pengaturcaraan berfungsi memberi kita cara untuk menurunkan kerumitan program kami dengan mengurangkannya ke dalam bentuk yang paling mudah: fungsi yang berkelakuan seperti fungsi matematik tulen. Mempelajari prinsip -prinsip pengaturcaraan berfungsi adalah tambahan yang hebat untuk set kemahiran anda dan akan membantu anda menulis program yang lebih mudah dengan bug yang lebih sedikit.

Konsep utama pengaturcaraan berfungsi adalah fungsi tulen, nilai yang tidak berubah, komposisi dan kesan sampingan.

fungsi tulen

Fungsi tulen adalah fungsi yang, diberi input yang sama, akan sentiasa mengembalikan output yang sama dan tidak mempunyai kesan sampingan yang dapat dilihat.

<span>// pure
</span><span>function add(a<span>, b</span>) {
</span>  <span>return a + b;
</span><span>}
</span>

Fungsi ini adalah PURE . Ia tidak bergantung kepada atau mengubah mana -mana keadaan di luar fungsi dan ia akan sentiasa mengembalikan nilai output yang sama untuk input yang sama.

<span>// impure
</span><span>var minimum = 21;
</span><span>var checkAge = function(age) {
</span>  <span>return age >= minimum; // if minimum is changed we're cactus
</span><span>};
</span>

Fungsi ini tidak suci kerana ia bergantung pada keadaan mutable luaran di luar fungsi.

Jika kita menggerakkan pembolehubah ini di dalam fungsi ia menjadi murni dan kita pasti bahawa fungsi kita akan menyemak usia kita setiap kali .

<span>// pure
</span><span>var checkAge = function(age) {
</span>  <span>var minimum = 21;
</span>  <span>return age >= minimum;
</span><span>};
</span>

Fungsi tulen tidak mempunyai kesan sampingan . Berikut adalah beberapa perkara penting yang perlu diingat:

    mengakses keadaan sistem di luar fungsi
  • objek bermutasi diluluskan sebagai argumen
  • membuat panggilan http
  • Mendapatkan Input Pengguna
  • Menanyakan Dom
Mutasi terkawal

Anda perlu menyedari kaedah mutator pada tatasusunan dan objek yang mengubah objek bawah, contohnya adalah perbezaan antara splice array dan kaedah slice.

<span>// impure, splice mutates the array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.splice(0,3); // arr may never be the same again
</span><span>};
</span>
<span>// pure, slice returns a new array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.slice(0,3);
</span><span>};
</span>
Jika kita mengelakkan kaedah mutasi pada objek yang diluluskan ke fungsi kita, program kita menjadi lebih mudah untuk alasan, kita boleh mengharapkan fungsi kita tidak boleh menukar perkara dari bawah kita.

faedah fungsi tulen
<span>let items = ['a','b','c'];
</span><span>let newItems = pure(items);
</span><span>// I expect items to be ['a','b','c']
</span>

fungsi tulen mempunyai beberapa faedah ke atas rakan -rakan mereka yang tidak suci:

lebih mudah diuji sebagai tanggungjawab tunggal mereka adalah untuk memetakan input -> output
  • Hasil boleh dikacau kerana input yang sama selalu menghasilkan output yang sama
  • Dokumentasi diri sebagai kebergantungan fungsi adalah eksplisit
  • lebih mudah untuk bekerja dengan kerana anda tidak perlu bimbang tentang kesan sampingan
  • Oleh kerana hasil fungsi tulen boleh dikosongkan, kita dapat memoize mereka sehingga operasi mahal hanya dilakukan pada kali pertama fungsi dipanggil. Sebagai contoh, memoizing hasil mencari indeks yang besar akan menghasilkan peningkatan prestasi besar pada run semula.

pengaturcaraan fungsional yang tidak munasabah

Mengurangkan program kami ke fungsi tulen secara drastik dapat mengurangkan kerumitan program kami. Walau bagaimanapun, program berfungsi kami juga boleh memerlukan bantuan Rain Man untuk memahami jika kita menolak abstraksi fungsional terlalu jauh.

ambil satu minit untuk mencerna kod di atas.
<span>import _ from 'ramda';
</span><span>import $ from 'jquery';
</span>
<span>var Impure = {
</span>  <span>getJSON: _.curry(function(callback<span>, url</span>) {
</span>    $<span>.getJSON(url, callback);
</span>  <span>}),
</span>
  <span>setHtml: _.curry(function(sel<span>, html</span>) {
</span>    <span>$(sel).html(html);
</span>  <span>})
</span><span>};
</span>
<span>var img = function (url) {
</span>  <span>return $('<img  alt="Pengenalan kepada pengaturcaraan fungsional yang murni" >', { src: url });
</span><span>};
</span>
<span>var url = function (t) {
</span>  <span>return 'http://api.flickr.com/services/feeds/photos_public.gne?tags=' +
</span>    t <span>+ '&format=json&jsoncallback=?';
</span><span>};
</span>
<span>var mediaUrl = _.compose(_.prop('m'), _.prop('media'));
</span><span>var mediaToImg = _.compose(img, mediaUrl);
</span><span>var images = _.compose(_.map(mediaToImg), _.prop('items'));
</span><span>var renderImages = _.compose(Impure.setHtml("body"), images);
</span><span>var app = _.compose(Impure.getJSON(renderImages), url);
</span><span>app("cats");
</span>

Kecuali anda mempunyai latar belakang dalam pengaturcaraan berfungsi abstraksi ini (kari, penggunaan yang berlebihan dan prop) benar -benar sukar untuk diikuti, seperti aliran pelaksanaan. Kod di bawah adalah lebih mudah difahami dan diubahsuai, ia juga lebih jelas menerangkan program ini daripada pendekatan semata -mata berfungsi di atas dan kod kurang.

  • Fungsi aplikasi mengambil rentetan tag
  • mengambil json dari flickr
  • menarik URL keluar respons
  • membina pelbagai Pengenalan kepada pengaturcaraan fungsional yang murni nod
  • memasukkannya ke dalam dokumen
<span>// pure
</span><span>function add(a<span>, b</span>) {
</span>  <span>return a + b;
</span><span>}
</span>

atau, API alternatif ini menggunakan abstraksi seperti mengambil dan berjanji membantu kita menjelaskan makna tindakan asynchronous kita lebih jauh lagi.

<span>// impure
</span><span>var minimum = 21;
</span><span>var checkAge = function(age) {
</span>  <span>return age >= minimum; // if minimum is changed we're cactus
</span><span>};
</span>

Nota: Ambil dan janji adalah piawaian yang akan datang sehingga mereka memerlukan polyfills untuk digunakan hari ini.

Permintaan AJAX dan operasi DOM tidak akan menjadi murni tetapi kita boleh membuat fungsi murni daripada yang lain, memetakan JSON respons kepada pelbagai imej - mari kita maafkan kebergantungan pada jQuery buat masa ini.

<span>// pure
</span><span>var checkAge = function(age) {
</span>  <span>var minimum = 21;
</span>  <span>return age >= minimum;
</span><span>};
</span>

Fungsi kami hanya melakukan dua perkara sekarang:

  • data tindak balas pemetaan -> url
  • pemetaan url -> imej

Cara "berfungsi" untuk melakukan ini adalah untuk mewujudkan fungsi berasingan untuk kedua -dua tugas tersebut dan kita boleh menggunakan Compose untuk lulus tindak balas satu fungsi ke yang lain.

<span>// impure, splice mutates the array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.splice(0,3); // arr may never be the same again
</span><span>};
</span>
<span>// pure, slice returns a new array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.slice(0,3);
</span><span>};
</span>

mengarang pulangan fungsi yang merupakan komposisi senarai fungsi, masing -masing memakan nilai pulangan fungsi yang berikut.

Inilah yang dikarang dilakukan, lulus tindak balas URL ke dalam fungsi imej kami.

<span>let items = ['a','b','c'];
</span><span>let newItems = pure(items);
</span><span>// I expect items to be ['a','b','c']
</span>

ia membantu membaca hujah -hujah untuk mengarang dari kanan ke kiri untuk memahami arah aliran data.

dengan mengurangkan program kami ke fungsi tulen, ia memberi kita keupayaan yang lebih besar untuk menggunakannya semula pada masa akan datang, mereka lebih mudah untuk diuji dan mereka mendokumentasikan diri. Kelemahannya ialah apabila digunakan secara berlebihan (seperti dalam contoh pertama) abstraksi fungsional ini boleh membuat sesuatu lebih kompleks yang pastinya bukan apa yang kita inginkan. Soalan yang paling penting untuk ditanya apabila kod refactoring walaupun ini:

adakah kod lebih mudah dibaca dan difahami?

fungsi penting

Sekarang, saya tidak cuba menyerang pengaturcaraan berfungsi sama sekali. Setiap pemaju harus membuat usaha bersepadu untuk mempelajari fungsi asas yang membolehkan anda abstrak corak umum dalam pengaturcaraan ke dalam kod deklaratif yang lebih ringkas, atau sebagai Marijn Haverbeke meletakkannya ..

Seorang pengaturcara yang bersenjata dengan repertoar fungsi asas dan, lebih penting lagi, pengetahuan tentang cara menggunakannya, jauh lebih berkesan daripada seseorang yang bermula dari awal. - JavaScript yang fasih, Marijn HaverBeke

Berikut adalah senarai fungsi penting yang setiap pemaju JavaScript harus belajar dan menguasai. Ini juga cara yang baik untuk menyikat kemahiran JavaScript anda untuk menulis setiap fungsi ini dari awal.

Arrays

  • foreach
  • peta
  • penapis
  • Kurangkan

Fungsi

  • debounce
  • Compose
  • Partial
  • Curry

kurang lebih

Mari kita lihat beberapa langkah praktikal yang boleh kita ambil untuk memperbaiki kod di bawah menggunakan konsep pengaturcaraan berfungsi.

<span>// pure
</span><span>function add(a<span>, b</span>) {
</span>  <span>return a + b;
</span><span>}
</span>

Mengurangkan fungsi pergantungan pada keadaan bersama

Ini mungkin kelihatan jelas dan remeh tetapi saya masih menulis fungsi yang mengakses dan mengubah banyak keadaan di luar diri mereka, ini menjadikan mereka lebih sukar untuk diuji dan lebih mudah terdedah kepada kesilapan.

<span>// impure
</span><span>var minimum = 21;
</span><span>var checkAge = function(age) {
</span>  <span>return age >= minimum; // if minimum is changed we're cactus
</span><span>};
</span>
Gunakan lebih banyak abstraksi bahasa yang boleh dibaca seperti foreach to iterate

<span>// pure
</span><span>var checkAge = function(age) {
</span>  <span>var minimum = 21;
</span>  <span>return age >= minimum;
</span><span>};
</span>
Gunakan abstraksi tahap yang lebih tinggi seperti peta untuk mengurangkan jumlah kod

<span>// impure, splice mutates the array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.splice(0,3); // arr may never be the same again
</span><span>};
</span>
<span>// pure, slice returns a new array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.slice(0,3);
</span><span>};
</span>
Kurangkan fungsi ke bentuk yang paling mudah

<span>let items = ['a','b','c'];
</span><span>let newItems = pure(items);
</span><span>// I expect items to be ['a','b','c']
</span>
padam kod sehingga berhenti berfungsi

Kami tidak memerlukan fungsi sama sekali untuk tugas yang mudah, bahasa ini memberikan kita abstraksi yang mencukupi untuk menulisnya verbatim.

<span>import _ from 'ramda';
</span><span>import $ from 'jquery';
</span>
<span>var Impure = {
</span>  <span>getJSON: _.curry(function(callback<span>, url</span>) {
</span>    $<span>.getJSON(url, callback);
</span>  <span>}),
</span>
  <span>setHtml: _.curry(function(sel<span>, html</span>) {
</span>    <span>$(sel).html(html);
</span>  <span>})
</span><span>};
</span>
<span>var img = function (url) {
</span>  <span>return $('<img  alt="Pengenalan kepada pengaturcaraan fungsional yang murni" >', { src: url });
</span><span>};
</span>
<span>var url = function (t) {
</span>  <span>return 'http://api.flickr.com/services/feeds/photos_public.gne?tags=' +
</span>    t <span>+ '&format=json&jsoncallback=?';
</span><span>};
</span>
<span>var mediaUrl = _.compose(_.prop('m'), _.prop('media'));
</span><span>var mediaToImg = _.compose(img, mediaUrl);
</span><span>var images = _.compose(_.map(mediaToImg), _.prop('items'));
</span><span>var renderImages = _.compose(Impure.setHtml("body"), images);
</span><span>var app = _.compose(Impure.getJSON(renderImages), url);
</span><span>app("cats");
</span>
ujian

dapat hanya menguji program kami adalah manfaat utama fungsi tulen, jadi dalam bahagian ini kami akan menubuhkan abah -abah ujian untuk modul Flickr kami yang kami lihat sebelumnya.

Api terminal dan editor teks anda bersedia dan siap, kami akan menggunakan Mocha sebagai pelari ujian kami dan Babel untuk menyusun kod ES6 kami.

<span>var app = (tags)=> {
</span>  <span>let url = <span>`http://api.flickr.com/services/feeds/photos_public.gne?tags=<span>${tags}</span>&format=json&jsoncallback=?`</span>
</span>  $<span>.getJSON(url, (data)=> {
</span>    <span>let urls = data.items.map((item)=> item.media.m)
</span>    <span>let images = urls.map((url)=> $('<img  alt="Pengenalan kepada pengaturcaraan fungsional yang murni" >', { src: url }) )
</span>
    <span>$(document.body).html(images)
</span>  <span>})
</span><span>}
</span><span>app("cats")
</span>
Mocha mempunyai sekumpulan fungsi berguna seperti menggambarkan dan ia untuk memecahkan ujian dan cangkuk kami seperti sebelum dan selepas untuk tugas persediaan dan air mata. menegaskan adalah pakej nod teras yang boleh melakukan ujian kesamaan mudah, menegaskan dan menegaskan. Deepequal adalah fungsi yang paling berguna untuk diperhatikan.

mari kita tulis ujian pertama kami dalam ujian/contoh.js

<span>let flickr = (tags)=> {
</span>  <span>let url = <span>`http://api.flickr.com/services/feeds/photos_public.gne?tags=<span>${tags}</span>&format=json&jsoncallback=?`</span>
</span>  <span>return fetch(url)
</span>  <span>.then((resp)=> resp.json())
</span>  <span>.then((data)=> {
</span>    <span>let urls = data.items.map((item)=> item.media.m )
</span>    <span>let images = urls.map((url)=> $('<img  alt="Pengenalan kepada pengaturcaraan fungsional yang murni" >', { src: url }) )
</span>
    <span>return images
</span>  <span>})
</span><span>}
</span><span>flickr("cats").then((images)=> {
</span>  <span>$(document.body).html(images)
</span><span>})
</span>
buka pakej.json dan pindaan skrip "ujian" kepada

berikut

<span>let responseToImages = (resp)=> {
</span>  <span>let urls = resp.items.map((item)=> item.media.m )
</span>  <span>let images = urls.map((url)=> $('<img  alt="Pengenalan kepada pengaturcaraan fungsional yang murni" >', { src: url }))
</span>
  <span>return images
</span><span>}
</span>

maka anda harus dapat menjalankan ujian NPM dari baris arahan untuk mengesahkan segala -galanya berfungsi seperti yang diharapkan.

<span>let urls = (data)=> {
</span>  <span>return data.items.map((item)=> item.media.m)
</span><span>}
</span><span>let images = (urls)=> {
</span>  <span>return urls.map((url)=> $('<img  alt="Pengenalan kepada pengaturcaraan fungsional yang murni" >', { src: url }))
</span><span>}
</span><span>let responseToImages = _.compose(images, urls)
</span>

boom.

Nota: Anda juga boleh menambah bendera -w bendera pada akhir arahan ini jika anda mahu Mocha menonton perubahan dan menjalankan ujian secara automatik, mereka akan berjalan dengan lebih cepat pada semula.

<span>let responseToImages = (data)=> {
</span>  <span>return images(urls(data))
</span><span>}
</span>
menguji modul flickr kami

mari tambahkan modul kami ke lib/flickr.js

<span>let items = ['a', 'b', 'c'];
</span><span>let upperCaseItems = ()=> {
</span>  <span>let arr = [];
</span>  <span>for (let i = 0, ii = items.length; i     <span>let item = items[i];
</span>    arr<span>.push(item.toUpperCase());
</span>  <span>}
</span>  items <span>= arr;
</span><span>}
</span></span>
Modul kami mendedahkan dua kaedah: Flickr akan dimakan secara terbuka dan fungsi peribadi _responsetoimages supaya kita dapat menguji bahawa secara berasingan.

Kami mempunyai beberapa kebergantungan baru: jQuery, underscore dan polyfills untuk mengambil dan berjanji. Untuk menguji mereka yang boleh kita gunakan jsdom untuk polyfill tetingkap dan dokumen DOM Objek dan kita boleh menggunakan pakej Sinon untuk merapatkan API Fetch.

<span>// pure
</span><span>function add(a<span>, b</span>) {
</span>  <span>return a + b;
</span><span>}
</span>

Buka ujian/_setup.js dan kami akan mengkonfigurasi JSDOM dengan global kami bahawa modul kami bergantung pada.

<span>// impure
</span><span>var minimum = 21;
</span><span>var checkAge = function(age) {
</span>  <span>return age >= minimum; // if minimum is changed we're cactus
</span><span>};
</span>

Ujian kami boleh duduk dalam ujian/flickr.js di mana kami akan membuat pernyataan mengenai output fungsi kami yang diberikan input yang telah ditetapkan. Kami "melengkapkan" atau mengatasi kaedah pengambilan global untuk memintas dan memalsukan permintaan HTTP supaya kami dapat menjalankan ujian kami tanpa memukul API Flickr secara langsung.

<span>// pure
</span><span>var checkAge = function(age) {
</span>  <span>var minimum = 21;
</span>  <span>return age >= minimum;
</span><span>};
</span>

Jalankan ujian kami sekali lagi dengan ujian NPM dan anda harus melihat tiga kutu hijau yang menjamin.

<span>// impure, splice mutates the array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.splice(0,3); // arr may never be the same again
</span><span>};
</span>
<span>// pure, slice returns a new array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.slice(0,3);
</span><span>};
</span>

phew! Kami telah berjaya menguji modul kecil kami dan fungsi -fungsi yang terdiri daripada ia, belajar tentang fungsi tulen dan cara menggunakan komposisi berfungsi di sepanjang jalan. Kami telah memisahkan yang tulen dari yang tidak suci, ia boleh dibaca, terdiri daripada fungsi kecil, dan ia diuji dengan baik. Kod ini lebih mudah untuk membaca, memahami, dan mengubah suai daripada contoh yang tidak munasabah di atas dan itulah satu -satunya tujuan saya apabila kod refactoring.

fungsi tulen, gunakannya.

Pautan

  • Panduan Profesor Frisby yang paling mencukupi untuk pengaturcaraan berfungsi - @Drboolean - buku percuma yang sangat baik ini mengenai pengaturcaraan fungsional oleh Brian Lonsdorf adalah panduan terbaik untuk FP yang saya jumpai. Banyak idea dan contoh dalam artikel ini telah datang dari buku ini.
  • JavaScript yang fasih - Pengaturcaraan Fungsional @Marijnjh - buku Marijn HaverBeke tetap menjadi salah satu intros kegemaran saya sepanjang masa untuk pengaturcaraan dan mempunyai bab yang hebat mengenai pengaturcaraan berfungsi juga.
  • Underscore - Menggali perpustakaan utiliti seperti garis bawah, Lodash atau Ramda adalah langkah penting dalam matang sebagai pemaju. Memahami cara menggunakan fungsi ini secara drastik akan mengurangkan jumlah kod yang anda perlukan untuk menulis, dan menjadikan program anda lebih deklaratif.

-

Itu semua buat masa ini! Terima kasih kerana membaca dan saya harap anda dapati ini pengenalan yang baik untuk pengaturcaraan fungsional, refactoring dan ujian dalam JavaScript. Ia adalah paradigma yang menarik yang membuat gelombang pada masa ini, disebabkan oleh populariti perpustakaan yang semakin meningkat seperti React, Redux, Elm, Cycle dan Reactivex yang menggalakkan atau menguatkuasakan corak -corak ini.

melompat masuk, air hangat.

soalan yang sering ditanya mengenai pengaturcaraan fungsional yang murni

Apakah kepentingan fungsi tulen dalam pengaturcaraan berfungsi? Mereka adalah fungsi yang sentiasa menghasilkan output yang sama untuk input yang sama dan tidak mempunyai kesan sampingan. Ini bermakna mereka tidak mengubah mana -mana negeri di luar skop mereka atau bergantung kepada mana -mana keadaan luaran. Ini menjadikan mereka dapat diramalkan dan mudah diuji, kerana anda hanya perlu mempertimbangkan input dan output, tanpa bimbang tentang faktor luaran. Fungsi tulen juga mempromosikan kebolehgunaan semula kod dan kebolehbacaan, menjadikan kod anda lebih mudah difahami dan diselenggara.

Bagaimanakah pengaturcaraan berfungsi berbeza daripada paradigma pengaturcaraan lain? Ini berbeza dengan pengaturcaraan yang penting, di mana program terdiri daripada kenyataan yang mengubah keadaan global apabila dilaksanakan. Pengaturcaraan fungsional menggalakkan abstraksi peringkat tinggi, seperti fungsi sebagai warga kelas pertama, dan menggalakkan pengaturcaraan dengan ungkapan dan bukannya kenyataan. Ini membawa kepada gaya pengaturcaraan yang lebih deklaratif dan ekspresif yang lebih mudah untuk alasan. menghasilkan output yang sama untuk input yang sama dan tidak menghasilkan sebarang kesan sampingan. Berikut adalah contoh:

fungsi tambah (a, b) { kembali b; }

Dalam contoh ini, fungsi tambah adalah fungsi tulen kerana ia selalu mengembalikannya Hasil yang sama diberikan hujah yang sama dan tidak mengubah suai mana -mana keadaan luaran. Mereka membuat kod anda lebih diramalkan dan lebih mudah untuk diuji dan debug, kerana anda hanya perlu mempertimbangkan input dan output fungsi. Mereka juga membuat kod anda lebih mudah dibaca dan dikekalkan, kerana mereka mempromosikan gaya pengaturcaraan yang jelas dan mudah. Tambahan pula, fungsi tulen sangat boleh diguna semula dan boleh digunakan, membolehkan anda membina fungsi yang lebih kompleks dengan kod yang kurang. , mereka juga mengemukakan beberapa cabaran. Salah satu cabaran utama ialah JavaScript bukan bahasa yang semata -mata berfungsi, dan ia membolehkan kesan sampingan dan data yang boleh berubah. Ini bermakna anda perlu berhati -hati untuk mengelakkan kesan sampingan secara tidak sengaja dalam fungsi anda. Di samping itu, menggunakan fungsi tulen kadang -kadang boleh membawa kepada lebih banyak kod verbose, kerana anda perlu mengelakkan data bermutasi dan sebaliknya mengembalikan data baru. sangat sesuai untuk kesesuaian dan paralelisme. Kerana fungsi tulen tidak mempunyai kesan sampingan, mereka boleh dilaksanakan dengan selamat selari tanpa bimbang tentang keadaan kaum atau rasuah data. Ini menjadikan pengaturcaraan berfungsi sebagai alat yang berkuasa untuk membangunkan aplikasi serentak dan selari, terutamanya dalam persekitaran pengkomputeran pelbagai teras dan diedarkan.

Atas ialah kandungan terperinci Pengenalan kepada pengaturcaraan fungsional yang murni. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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
Ganti aksara rentetan dalam javascriptGanti aksara rentetan dalam javascriptMar 11, 2025 am 12:07 AM

Penjelasan terperinci mengenai kaedah penggantian rentetan javascript dan Soalan Lazim Artikel ini akan meneroka dua cara untuk menggantikan watak rentetan dalam JavaScript: Kod JavaScript dalaman dan HTML dalaman untuk laman web. Ganti rentetan di dalam kod JavaScript Cara yang paling langsung ialah menggunakan kaedah pengganti (): str = str.replace ("cari", "ganti"); Kaedah ini hanya menggantikan perlawanan pertama. Untuk menggantikan semua perlawanan, gunakan ungkapan biasa dan tambahkan bendera global g: str = str.replace (/fi

Bina Aplikasi Web Ajax anda sendiriBina Aplikasi Web Ajax anda sendiriMar 09, 2025 am 12:11 AM

Jadi di sini anda, bersedia untuk mempelajari semua perkara ini yang dipanggil Ajax. Tetapi, apa sebenarnya? Istilah Ajax merujuk kepada kumpulan teknologi longgar yang digunakan untuk membuat kandungan web yang dinamik dan interaktif. Istilah Ajax, yang asalnya dicipta oleh Jesse J

10 JQuery Fun and Games Plugin10 JQuery Fun and Games PluginMar 08, 2025 am 12:42 AM

10 Plugin Permainan JQuery yang menyeronokkan untuk menjadikan laman web anda lebih menarik dan meningkatkan keletihan pengguna! Walaupun Flash masih merupakan perisian terbaik untuk membangunkan permainan web kasual, jQuery juga boleh menghasilkan kesan yang mengejutkan, dan walaupun tidak setanding dengan permainan flash aksi tulen, dalam beberapa kes, anda juga boleh bersenang -senang di penyemak imbas anda. permainan jquery tic toe "Hello World" pengaturcaraan permainan kini mempunyai versi jQuery. Kod sumber JQuery Game Composition Crazy Word Ini adalah permainan mengisi kosong, dan ia dapat menghasilkan beberapa hasil yang pelik kerana tidak mengetahui konteks perkataan. Kod sumber JQuery Mine Sweeping Game

Bagaimana saya membuat dan menerbitkan perpustakaan JavaScript saya sendiri?Bagaimana saya membuat dan menerbitkan perpustakaan JavaScript saya sendiri?Mar 18, 2025 pm 03:12 PM

Artikel membincangkan membuat, menerbitkan, dan mengekalkan perpustakaan JavaScript, memberi tumpuan kepada perancangan, pembangunan, ujian, dokumentasi, dan strategi promosi.

JQuery Parallax Tutorial - Latar Belakang Header AnimasiJQuery Parallax Tutorial - Latar Belakang Header AnimasiMar 08, 2025 am 12:39 AM

Tutorial ini menunjukkan cara membuat kesan latar belakang paralaks yang menawan menggunakan jQuery. Kami akan membina sepanduk header dengan imej berlapis yang mewujudkan kedalaman visual yang menakjubkan. Plugin yang dikemas kini berfungsi dengan JQuery 1.6.4 dan kemudian. Muat turun

Bagaimanakah saya mengoptimumkan kod JavaScript untuk prestasi dalam penyemak imbas?Bagaimanakah saya mengoptimumkan kod JavaScript untuk prestasi dalam penyemak imbas?Mar 18, 2025 pm 03:14 PM

Artikel ini membincangkan strategi untuk mengoptimumkan prestasi JavaScript dalam pelayar, memberi tumpuan kepada mengurangkan masa pelaksanaan dan meminimumkan kesan pada kelajuan beban halaman.

Kandungan Div Refresh Auto Menggunakan JQuery dan AjaxKandungan Div Refresh Auto Menggunakan JQuery dan AjaxMar 08, 2025 am 12:58 AM

Artikel ini menunjukkan bagaimana untuk menyegarkan semula kandungan div secara automatik setiap 5 saat menggunakan jQuery dan Ajax. Contohnya mengambil dan memaparkan catatan blog terkini dari suapan RSS, bersama -sama dengan timestamp refresh terakhir. Imej pemuatan adalah opsyena

Bermula dengan Matter.js: PengenalanBermula dengan Matter.js: PengenalanMar 08, 2025 am 12:53 AM

Matter.js adalah enjin fizik badan tegar 2D yang ditulis dalam JavaScript. Perpustakaan ini dapat membantu anda dengan mudah mensimulasikan fizik 2D dalam penyemak imbas anda. Ia menyediakan banyak ciri, seperti keupayaan untuk mencipta badan yang tegar dan menetapkan sifat fizikal seperti jisim, kawasan, atau ketumpatan. Anda juga boleh mensimulasikan pelbagai jenis perlanggaran dan daya, seperti geseran graviti. Matter.js menyokong semua pelayar arus perdana. Di samping itu, ia sesuai untuk peranti mudah alih kerana ia mengesan sentuhan dan responsif. Semua ciri-ciri ini menjadikannya bernilai masa untuk belajar menggunakan enjin, kerana ini memudahkan untuk membuat permainan atau simulasi 2D berasaskan fizik. Dalam tutorial ini, saya akan merangkumi asas -asas perpustakaan ini, termasuk pemasangan dan penggunaannya, dan menyediakan

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).