iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 22
0
自我挑戰組

前端工程師的30份套餐系列 第 22

Day22-Pure Function

  • 分享至 

  • xImage
  •  

Pure Function 翻譯為純函數,是指相同的輸入,永遠會得到相同的輸出,而且沒有任何副作用也不依賴任何外部狀態。Day21提到的curry(柯里化)也是Pure Function。

什麼是副作用?

在計算結果的過程中,系統狀態的一種改變,或是外部可觀察的交互作用。有些函數的參數是一種輸入/輸出作用的參數,就是函數可能改變參數裡面的內容,把一些資訊透過輸入參數,夾帶帶外界,這種情況嚴格來說也是副作用

依賴外部狀態是什麼意思呢,來看看以下範例:

let b = 1
testFunc(a) {
    b = a
}

以上範例就依賴function外部的變數,所以這就是不純粹的函式,其實在JavaScript中不純粹的函式很常見,像是console.log或alert,因為會在瀏覽器輸出,也是一種副作用

而pure function 最典型的就是根據輸入來做快取計算(跟柯里化一樣)

var Number = multiply(function(){
    return x*x;
});
Number(2);  //4
Number(4);  //16
Number(6);  //36

Pure Function的優點有哪些呢?

  • 程式碼閱讀提高
  • 容易測試、除錯
  • 重複使用性高
  • 組合性高(易與其他函式組合)還是純函數
  • 無狀態
  • 執行續安全
  • 加快運算速度
  • 有利於重構

非純函數(Implicit)

從外界獲取資料,或者向外部輸出資料,那麼該函數就不是純函數,叫做非純函數(Impure Function)


上一篇
Day21-Curry(柯里化)
下一篇
Day23-事件處理
系列文
前端工程師的30份套餐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言