1. 程式人生 > 其它 >函數語言程式設計 -- 純函式

函數語言程式設計 -- 純函式

什麼是純函式?

純函式:相同的輸入永遠會得到相同的輸出,而且沒有任何可觀察的副作用

// 純函式slice和不純函式splice
let array=[1,3,6,8]
//slice不改原陣列,第次輸出結果是一樣的,是純函式
console.log(array.slice(0,3))
console.log(array.slice(0,3))
console.log(array.slice(0,3))
// 輸出:
// [1,3,6]
// [1,3,6]
// [1,3,6]

//splice改變了原陣列,每次輸出結果不一樣,不是純函式
console.log(array.splice(0,3))
console.log(array.splice(0,3))
console.log(array.splice(0,3))
// 輸出:
// [1,3,6]
// [8]
// []

純函式的好處

  • 因為純函式每次都能夠得到相同的結果,所以可以把結果快取起來
    • 在lodash中有記憶函式,可以快取結果

      const require('lodash')
      function getArea(r){
        console.log(r)
        return Math.PI*r*r
      }
      
      let getAreaWithMemory=__.memoize(getArea)
      console.log(getAreaWithMemory(4))
      console.log(getAreaWithMemory(4))
      console.log(getAreaWithMemory(4))
      // 輸出:
      // 4
      // 50.26548245743669
      // 50.26548245743669
      // 50.26548245743669
      
    • 從結果可以看出,只有第一次輸出了4,其它再次都是直接輸出的快取結果