函式式程式設計不會保留計算中間的結果,所以變數是不可改變的(無狀態的)
我們可以把乙個函式的執行結果交給另乙個函式去處理
**示例
let arr =[1
,2,3
,4,5
,6]// 純函式 --- 相同的輸入永遠會得到相同的輸出
console.
log(arr.
slice(0
,3))
console.
log(arr.
slice(0
,3))
console.
log(arr.
slice(0
,3))
// 非純函式 --- 相同的輸入不會得到相同的輸出
console.
log(arr.
splice(0
,3))
console.
log(arr.
splice(0
,3))
console.
log(arr.
splice(0
,3))
// 自己封裝乙個純函式
function
getsum
(n1, n2)
console.
log(
getsum(0
,1))
console.
log(
getsum(1
,2))
console.
log(
getsum(2
,3))
const _ =
require
('lodash'
)function
getarea
(r)// 通過lodash的memoize來檢視純函式的可快取性
let getareawithmemory = _.
memoize
(getarea)
console.
log(
getareawithmemory(4
))console.
log(
getareawithmemory(4
))console.
log(
getareawithmemory(4
))// 模擬memoize 方法的實現
function
memoize
(fn)
return
function()
}let getareawithmemory =
memoize
(getarea)
console.
log(
getareawithmemory(4
))console.
log(
getareawithmemory(4
))console.
log(
getareawithmemory(4
))
可測試
並行處理
// 不純的 --- 判斷條件mini是全域性變數,一旦被修改,就不能滿足純函式的概念
let mini =
18function
checkage
(age)
// 純函式(有硬編碼,後續可以通過柯里化解決)
function
checkage
(age)
***讓乙個函式變得不純(如上例),純函式根據相同的輸入返回相同的輸出,如果函式依賴於外部的狀態就無法保證輸出相同,就會帶來***。
所有的外部互動都有可能帶來***,***也是的方法通用性下降不是和擴充套件和可重用性,同時***會給程式中帶來安全隱患給程式帶來不確定性,但是***不可能完全禁止,盡可能控制他們在可控範圍內發生
中斷自平衡的好處與副作用
有的時候提高linux系統網絡卡的吞吐量,需要開啟中斷平衡,但前提是核心或者應用程式需要支援多核下的併發操作,否則會因為併發錯誤,導致程式行為出差。需要關閉中斷自平衡和固定繫結中斷號到固定的cpu,程式執行退回到單核模式。1.關閉irqbalance service irqbalance stop ...
過程或函式的副作用是 函式式程式設計主食
函式式程式設計是什麼?在函式式程式設計中,函式就是乙個管道 pipe 這頭進去乙個值,那頭就會出來乙個新的值,沒有其他作用。阮一峰 函式式程式設計入門教程 函式式程式設計本質上是一種數 算。因為是數 算所以自然就會涉及到加減乘除等運算和交換律結合律同一律分配律等運算法則。如果要函式順利的進行數 算,...
迴圈1 函式的概念與作用
shell中的函式類似於命令列的別名,通過把一段 定義為乙個函式體,在其他地方呼叫該函式時就呼叫了整段 也可以把函式單獨的寫在乙個檔案中,當需要呼叫函式時,再載入進來使用 function 函式名 函式名 函式分為最基本的函式和可以傳參的函式兩種,執行方式分別如下 函式後接引數的說明 shell的位...