日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS函数式编程概念理解:函子(Functor)

發(fā)布時間:2025/5/22 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS函数式编程概念理解:函子(Functor) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

標簽(空格分隔): 函數式編程 函子 functor


很多前端在學習函數式編程之前,都會被各種概念折磨的死去活來,本文的重點算是函數式編程之前的一個甜品,重點在如何切入。

函子即Functor是FP(函數式編程簡寫)當中重要的概念,理解這個概念對你學習FP后面的很重要。不然學的就是云里霧里。

網上的文章不在少數,很多人也看過,筆者非科班出身,僅從個人角度學習和科普這個知識點

送給川普的豬頭肉

有這么一個場景,可以想象下,我們和鄰居之間交換東西,都很直接,不需要繁瑣的包裝等等。就像加減法一樣,1 + 1 = 2;假如我要給在美國的親戚特朗普寄送一些豬頭肉。很顯然我不能拿著豬頭肉直接去。

我首先會把豬頭肉包裝,那么他就是被容器化之后的肉,交給快遞員,我會告訴快遞員這個裝有肉的容器打開方法,因為通過海關的時候需要打開進行檢疫,然后蓋上郵戳,重新包裝,送往美國白宮。

以上例子并不是肉自己直接走過去的,而是容器化之后的肉,有包裝的方法,比如易碎、保險、向上打開等等注意事項,防止海關檢查的時候不小心損壞。

我們有用代碼實現下

//肉盒子 class MeatBox {constructor(meat) {this.value = meat;}//map為打開包裝的方法map(fn) {return new MeatBox(fn(this.meat));} }復制代碼

海關打開之后檢疫完成,他又會根據盒子的規(guī)范重新打包成新的肉容器,方便在美國海關檢疫。同樣美國海關覺得豬頭肉和好吃,咬一口,又打包成原來的樣子,給川普總統(tǒng)。

繼續(xù)看代碼流程

//把肉容器化 let meatBox1 = new MeatBox('豬頭肉'); //海關檢疫 let meatBox2 = meatBox.map(function(meat){return check(meat); }); //美國海關咬了一口 let meatBox3 = meatBox.map(function(meat){return eat(meat); }); //川普吃到了你的豬頭肉 meatBox3.map(function(meat){return Trump(meat); }); 復制代碼

用鏈式寫法

new MeatBox('豬頭肉').map(check).map(eat).map(function(trump); 復制代碼

如果白宮在你家隔壁,你直接送過去就行,沒這么多事。但是很明顯不行。我們總結一下上面幾個特點

  • 肉從一個單體或者一個值被容器化了,變成了一個具有數據類型的容器
  • 每一次對肉的都會拿出來進行計算然后又重新根據規(guī)則或者協(xié)議標準容器化;
  • 容器具有map這個方法,來取值,并且返回的也有map方法;
  • 還可以鏈式調用;
  • 像我們學習數據時候的映射 y = f(x),包含了值和變形關系;

什么是函子呢(Functor)?

根據以上的場景,得出

  • Functor(函子)遵守一些特定規(guī)則的容器類型或者數據編程協(xié)議;
  • 具有一個通用的map方法,返回新實例,這個實例和之前實例有相同的規(guī)則;
  • 具有結合外部的運算能力;

按照我的理解,函子Functor其實準確的來說是:值被容器化之后具有一條標準協(xié)議規(guī)范的數據類型或者數據容器。map屬于函子的一個特征,Monad(單子),這個概念后面講,肯定還有跟多的單子。

如果單純的說具有map的數據類型是函子,沒錯但是不嚴謹。比如引用類型數據,很多文章也認為是函子,因為也具有map方法。

其實在阮一峰的文章當中說的很清楚,我就不再闡述,有興趣的可以看看。

Functor 是一個對于函數調用的抽象,賦予容器自己去調用函數的能力。把東西裝進一個容器,只留出一個接口 map 給容器外的函數,map 一個函數時,我們讓容器自己來運行這個函數,這樣容器就可以自由地選擇何時何地如何操作這個函數,以致于擁有惰性求值、錯誤處理、異步調用等等非常牛掰的特性。

說了這么多,應用場景呢?

其實從上面的場景看,你可能會說,我直接去白宮不就完了,省的川普說為什么有人送了一塊咬過得的肉。

在編程開發(fā)中,尤其是多人協(xié)作,一個數據從數據庫出來,會各種計算、加入業(yè)務邏輯,最終呈現給消費方。數據鏈路越長,數據元信息越容易丟失。就好像一句話通過幾個人之后,完全和原來的意思相差甚遠。

以上只是一方面,更多是融合在函數式編程當中,讓數據的計算和業(yè)務剝離,我們不用大量的業(yè)務邏輯和命令式編程,例如for循環(huán),把重點放在副作用上的等(副作用在這里是中性詞);數據鏈路會更容易清晰去實現。

這就是函子的基本概念,其實也沒那么復雜,理解這個對你函數式編程有很大的幫助。

有興趣的可以關注筆者QQ群:126274877

《新程序員》:云原生和全面數字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的JS函数式编程概念理解:函子(Functor)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美偷拍一区二区 | 中国在线观看视频高清免费 | 久久久久久久久久福利 | 国产色啪| 国产国语性生话播放 | 国产最新视频 | 中文字幕高清av | 黄色三级小说 | 日日夜夜婷婷 | 国产成人精品一区二区三区在线观看 | 美女啪啪国产 | va在线看| 国产一区二区久久 | 女女av在线 | 亚洲天堂中文字幕在线观看 | 黄页视频在线观看 | 国产九九热视频 | 91九色论坛 | ass大乳尤物肉体pics | 成人av免费看 | 日批视频在线免费看 | 三级av片| www.jizzjizz.com| 久久免费视频99 | 午夜一区 | 人妻少妇偷人精品视频 | av播放网站 | 亚洲精品一区二区在线观看 | 久久免费小视频 | 一区二区三区黄色录像 | 亚洲午夜在线 | 俺啪也 | 亚洲老老头同性老头交j | 中文字幕第一页在线 | 中文字幕免费在线看线人动作大片 | 伊人网站在线观看 | 插插插干干干 | 在线观看www视频 | 日韩欧美国产一区二区 | www黄色 | 波多野结衣一区二区三区 | 亚洲人成7777 | 大陆农村乡下av | 欧美一区二区三区视频在线观看 | 日韩高清一级片 | 中文字幕在线日本 | 老司机午夜视频 | 国产亚洲精品久久久 | 亚洲精品久久久中文字幕痴女 | 国产福利一区二区三区视频 | 综合网久久 | 福利二区 | 啪网址 | 九色91av| 天天综合欧美 | 欧美激情亚洲 | 91av免费看 | av天天操| 美国福利片 | 国产熟女高潮一区二区三区 | 国产乱大交 | 亚洲二三区 | 日韩av不卡一区二区 | 西西人体www大胆高清 | 国产人妻精品一区二区三 | 激情视频在线播放 | 337p亚洲欧洲色噜噜噜 | 超碰1997| 日韩v欧美| 五月婷婷综合激情 | 波多野结衣91 | 久久密 | 红杏出墙记 | 亚洲香蕉av | 亚洲aa| 日本精品黄色 | 欧美区在线 | 国产精品扒开腿做爽爽 | 麻豆短视频在线观看 | 亚洲精品乱码久久久久久日本蜜臀 | 免费黄色在线网址 | a级片免费观看 | 都市激情校园春色亚洲 | 91女人18毛片水多国产 | 色射射| 桃色在线视频 | 岛国裸体写真hd在线 | 国产精品极品白嫩在线 | 男人的天堂在线观看av | 成人必看www. | 在线观看中文字幕av | 国产精品免费无码 | 深夜视频在线播放 | 毛片毛多水多 | 亚洲二三区 | 五月综合激情日本mⅴ | 自拍视频第一页 | 中文字幕+乱码+中文字幕明步 | 成年人网站在线免费观看 |