日韩性视频-久久久蜜桃-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)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日本色综合网 | 国产男女视频在线观看 | 无码人妻精品一区二区三区温州 | 中文一二三区 | 日本55丰满熟妇厨房伦 | 神马午夜av| 依人99 | 久久99精品久久久 | 91av在线播放| 日本在线黄色 | 师生出轨h灌满了1v1 | 福利一区三区 | 国产日韩精品一区二区 | 日韩在线视频网站 | 国产精欧美一区二区三区白种人 | 天堂av一区二区 | 搡老熟女国产 | 香蕉视频在线免费看 | 亚洲综合性 | 91超碰人人 | 日韩成人免费在线 | 日日干天天操 | 四虎少妇做爰免费视频网站四 | 日韩成人免费 | 乱人伦xxxx国语对白 | 狂野欧美性猛交xxⅹ李丽珍 | 国产一区网站 | 亚洲av无码片一区二区三区 | 日本午夜一区 | av大片网 | 亚洲欧美不卡 | 伊人网视频在线观看 | 日本一级黄色大片 | 欧美男人的天堂 | 国产情侣在线播放 | 久久理论电影 | 亚洲美女激情视频 | 欧美a天堂| 伊人69| 和黑帮大佬的365 | 碧蓝之海动漫在线观看免费高清 | 亚洲一区二区国产 | 青青草原综合网 | 日本黄色网页 | 欧美成人vr18sexvr| 久久国产精品区 | 日本黄区免费视频观看 | 日本三级中文字幕在线观看 | 浪潮av色| 成人av免费| 五月天综合视频 | 欧美一区二区三区四区在线观看 | 国产精品久久久久久久久久久久久久 | 国产高清免费 | av午夜精品| xxxxav| 日本免费网 | 咪咪色影院 | 午夜爱爱免费视频 | 日韩成人动漫在线观看 | 欧美视频www | 天天干天天摸天天操 | 中文字幕人成乱码熟女香港 | 午夜精品久久久久久99热 | 杨幂一区二区三区免费看视频 | 顶弄h校园1v1| 国产91视频在线 | 亚洲h视频在线观看 | 国内自拍偷拍视频 | 91视频二区| 丁香五色月 | 一级做a爰片毛片 | 欧美女优一区二区 | 久久国产精品无码一级毛片 | 亚洲精品久久久蜜桃网尤妮丝 | 国产主播福利在线 | 国产精品免 | 国产伦精品 | 色老头一区 | 视频二区中文字幕 | 已满十八岁免费观看 | 亚洲av无码一区二区乱子仑 | 精品国产aⅴ一区二区三区东京热 | 人妻一区二区三区 | 污污av | 色屁屁ts人妖系列二区 | 好看的中文字幕av | 在线播放波多野结衣 | 亚洲第一av在线 | 啪视频网站 | 国产妇女馒头高清泬20p多 | 在线中文字日产幕 | 成人福利午夜 | 日韩成人高清视频在线观看 | 高清不卡一区二区三区 | 成人黄色短视频在线观看 | 少妇一晚三次一区二区三区 | 福利视频在线导航 | 真人真事免费毛片 |