JS函數式編程02--柯里化和函數組合

柯里化

柯里化是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,并且返回接受余下的參數而且返回結果的新函數的技術。
柯里化幫助我們將任意多元函數變?yōu)橐辉瘮堤幚怼?/p>

柯里化實現的意義?

實現柯里化到底有啥意義或者好處呢?

  1. 代碼能夠更好的復用
  2. 這是對函數參數的一種緩存
  3. 讓函數更靈活,讓函數的粒度更小,便于函數組合產生最大的功能

柯里化的用法

我們舉一個很簡單的例子,實現一個年齡比較大小方法

  function checkAge(min){
    return function(age){
      return age>= min
    }
  }
  const age = checkAge(18)
  age(20)//true
  age(10)//false
  age(18)//true

這樣寫法可以使代碼更好的復用,當你比較其他數字時再獲取比較數字的方法就好。

柯里化的原理模擬

柯里化的本質就是把多元函數改為一元函數處理。

//模擬curry
function curry(func){
    return function curriedFn(...arg){
        if(arg.length < func.length){//如果實際參數的個數小于形參個數,我們要返回一個新的函數
            return function () {
                return curriedFn(...arg.concat(Array.from(arguments)))
            }
        }
        //實際參數大于等于形參個數
        return func(...arg)
    }
}

function getSum (a,b,c){
    return a + b + c;
}
const curried = curry(getSum)

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

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

console.log(curried(1)(2)(3))

函數組合

函數組合的概念

若一個函數要經過多個函數處理才能得到最終值,這個時候可以把中間過程的函數合并成一個函數。

  • 函數就像數據的管道,函數組合就是把這些管道連接起來,讓數據穿過多個管道形成最終結果。
  • 函數組合默認執(zhí)行順訊是從右往左執(zhí)行。
    下面舉一個反轉數組后拿到數組第一個元素的功能
function reverse (arr) {
    return array.reverse()
}

function first(arr){
  return array[0]
}

function compose(f,g){
  return function(val){
    return f(g(val))
  }
}

const last = compose(first,reverse)
last([1,2,3,4,5])

函數組合滿足結合律

函數之間的組合滿足結合律,意思就是我們現在有f,g,h三個函數,我們既可以先讓f,g組合,再與h組合,又可以先讓g,h組合,再和f組合。

總結

這篇文章主要總結了函數柯里化和函數組合,下一篇會總結函子的概念和用法。
函數式編程01

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容