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