4 函式式程式設計正規化筆記

2021-10-06 21:04:15 字數 2554 閱讀 7940

本文為拉勾網大前端高薪訓練營第一期筆記

const blogcontroller = ,

等效const blogcontroller =

}const fn = makefn()

fn()

function once(fn)

}}let pay = once(function (money)`)

})pay(5)

pay(5)函式在執行的時候會放在乙個執行棧上,當函式執行完畢之後會從執行棧上移除,但是堆上的作用域成員因為被外部引用不能釋放,因為內部函式依然可以訪問外部函式的成員

相同的輸入永遠得到相同的輸出

純函式的好處兩點 例如

const getareawithmemory = _.memoize(getarea)
***:如果有外部變數參與純函式運算,就會把純函式變成不純

把多個引數的函式,變成函式包函式,第一次只傳部分不怎麼變化的引數,然後第二次傳剩下函式。

const sum = _.curry((a,b,c)=>a+b+c)

sum(1,2,3)

sum(1)(2,3)

sum(2,3)(1)

const curry = (fn) => 

} else

}}const sum = curry((a,b,c)=>a+b+c)

console.log(sum(1,2,3))

console.log(sum(1,2)(3))

fn.length能拿到形參的數量

_.flow() _.flowright()後者是從右向左執行

const flowright = function (...args) , value)

}}//單行寫法

const flowright = (...args) => value=> , value)}

compose(f,g,h)等效compose(compose(f,g), h)等效compose(f, compose(g,h))

函式組合傳入的都需要是一元函式,如果是二元或者更多就需要柯里化變成一元,除錯的時候可以加log在函式組合之中

const log = v => 

//tag版本的log

const trace = _.curry((tag, v) => )

trace('tag')

const fp = require(『lodash/fp』)

fp.map(_.tolower)(array)

自帶柯里化和引數的函式優先,數值後置

fp.map只會把資料傳到下乙個函式裡,不會帶上index collection

容器:包含值和值的變形關係(這個變形關係就是函式)

函子:是乙個特殊的容器,通過乙個普通的物件來實現,該物件具有map方法,map方法可以執行乙個函式對值進行處理(變形關係)

我的理解為用容器包數值,然後通過map傳運算函式,最後返回新的容器,不斷重複這個過程

maybe函子是處理了null和undefined的情況

either函子是處理了有錯誤的情況,可以把錯誤傳到最後

io函子是返回處理的function,不傳值,最後執行的時候才生成值,函子部分永遠是純的,因為返回的是運算本身,不純的操作甩鍋到最後執行

folktale庫可以有compose curry,也製造task函子,使用起來像spark

const  = require('folktale/core/lambda')
// task 處理非同步任務

const fs = require('fs')

const = require('folktale/concurrency/task')

const = require('lodash/fp')

function readfile (filename) )

})}readfile('package.json')

.map(split('\n'))

.map(find(x => x.includes('version')))

.run()

.listen(,

onresolved: value =>

})

pointed函子是實現了of靜態方法的函子

避免使用new建立函子,更深層的含義是of方法用來把值放在上下文context(把值放在函子,用map處理值)

monad函子就是變扁的pointed函子,乙個函子如果同時具有join和of兩個方法並遵守一些定律就是乙個monad

我的理解是當乙個函子返回乙個函子時,就flatmap,解決函子巢狀的問題,flatmap裡就是把map合併操作和返回函子內部值join連續操作,如果普通的fp.toupper這樣的函式就直接用map就好了

錯題分析

函式式程式設計不能提高效能

***也就是外界引數參與純函式,使得純函式變得不純,不可避免

本文為拉勾網大前端高薪訓練營第一期筆記

函式式程式設計(4)

高階函式 1.高階函式 以乙個函式作為引數 以乙個函式作為返回結果。2.以函式為引數的有 map,reduce和 filter等一些函式,具體的操作請參照underscore.1 對於 max這個函式是用運算子 來比較的,然而他不能實現真正的比較,這時就需要建立乙個新函式了。例 function f...

程式設計正規化 面向過程與函式式

一 面向過程 基於面向過程開發程式就好比在設計一條流水線,若程式一開始是要著手解決乙個大的問題,按照過程式的思路就是把這個大的問題分解成很多個小問題或子過程去實現,然後依次呼叫即可,這極大地降低了程式的複雜度。舉例如下 寫乙個資料遠端備份程式,分三步 本地資料打包,上傳至雲伺服器,檢測備份檔案可用性...

函式式程式設計筆記

在數學的發展史上,針對category theory出現了一整套函式的運算方法,這個方法被用於程式設計就是現在的函式式程式設計。所以函式式程式設計的本質是數學的運算方法。我們都知道,數學的原始目的是求值。我理解的數學就是 給你一些條件,然後我需要乙個結果,過程是怎樣我是不管的。所以函式式程式設計的目...