python函数和代码复用思维导图_函数式编程库:Ramda函数思维导图,帮你快速选择要用的函数...
為什么要用ramda庫
Pointfree 的概念,也就是函數(shù)級別的抽象,我們經(jīng)常說復(fù)用邏輯,復(fù)用邏輯的關(guān)鍵的就是抽象,無論是面向?qū)ο筮€是架構(gòu)設(shè)計。但是很少有人談到函數(shù)級別的復(fù)用,當(dāng)我了解ramda庫的時候,我覺得這是一個很不錯的方案。舉個例子
假如我們有這么一段數(shù)據(jù),需要篩選其中屬性isMan: true的值:
var list = [{ name: 'zhangsan', isMan: true }, { name: 'xiaoli', isMan: false }, ...]
復(fù)制代碼
我們看看不同的處理函數(shù)的寫法,帶來的復(fù)用性的差別
// Plain JS
var manList = list.filter(function(task) {
return task.isMan;
});
復(fù)制代碼
復(fù)制代碼使用LoDash,會簡單一點(diǎn):
var manList = _.filter(list, {isMan: true});
復(fù)制代碼
復(fù)制代碼上面兩種情況,我們都會得到一個經(jīng)過過濾的任務(wù)列表。
現(xiàn)在使用Ramda,我們可以這樣做:
var filterManList = R.filter(R.where({complete: false});
復(fù)制代碼
可以看出,其實ramda是在組裝函數(shù),連數(shù)據(jù)都沒有,你要篩選數(shù)據(jù)的時候需要filterManList(list)
也就是說,處理數(shù)據(jù)的時候,我們不要把數(shù)據(jù)和函數(shù)耦合在一起,用一種可拆分的函數(shù)組裝的方式去處理,會讓復(fù)用性更強(qiáng)。例如下圖
fn = R.pipe(f1, f2, f3);
復(fù)制代碼
也就是函數(shù)和可以任意組合成新的函數(shù)fn,這個思想跟面向?qū)ο缶幊汤?#xff0c;設(shè)計模式中的責(zé)任鏈模式非常相似,比如redux中間件組合也是這種思想。
其實用什么庫不是很重要,只要能幫助你快速完成業(yè)務(wù)需求,才是最重要的,ramda只是一種選擇,你認(rèn)同這種編程思想。
學(xué)習(xí)ramda最大的難點(diǎn)
我也接觸時間并不長,學(xué)習(xí)它我覺得最大的問題是官網(wǎng)那么多函數(shù),讓自己去篩選想要的很難第一時間找到,這就會極大的阻礙繼續(xù)使用這個庫的信心,所以我總結(jié)了一張思維導(dǎo)圖表,按業(yè)務(wù)需求常見的類似增刪改查這樣的邏輯分了一下類,幫助想用這個庫的同學(xué)快速找到對應(yīng)的函數(shù)
總結(jié)這個真的非常費(fèi)力,圖很大,需要保存到電腦上(結(jié)合官方文檔,可以查看用法示例https://ramda.cn/docs/)
總結(jié)
以上是生活随笔為你收集整理的python函数和代码复用思维导图_函数式编程库:Ramda函数思维导图,帮你快速选择要用的函数...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【c++思维导图与代码示例】02 函数
- 下一篇: python爬虫ip限制_爬虫访问中如何