亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JS每日一題:函數(shù)式編程中代碼組合(compose)如何理解?

Kaede / 823人閱讀

摘要:期函數(shù)式編程中代碼組合如何理解定義顧名思義,在函數(shù)式編程中,就是將幾個(gè)有特點(diǎn)的函數(shù)拼湊在一起,讓它們結(jié)合,產(chǎn)生一個(gè)嶄新的函數(shù)代碼理解一個(gè)將小寫轉(zhuǎn)大寫的函數(shù)一個(gè)在字符后加的函數(shù)將兩個(gè)函數(shù)組合起來這里假設(shè)我們實(shí)現(xiàn)了每日一題每日一題顯示結(jié)果里上面

20190315期

函數(shù)式編程中代碼組合(compose)如何理解?

定義: 顧名思義,在函數(shù)式編程中,Compose就是將幾個(gè)有特點(diǎn)的函數(shù)拼湊在一起, 讓它們結(jié)合, 產(chǎn)生一個(gè)嶄新的函數(shù)

代碼理解:

// 一個(gè)將小寫轉(zhuǎn)大寫的函數(shù)
let toUpperCase = (x) => x.toUpperCase();

// 一個(gè)在字符后加!的函數(shù)
let exclaim = (x) => x + "!";

// 將兩個(gè)函數(shù)組合起來, 這里假設(shè)我們實(shí)現(xiàn)了compose
let shout = compose(toUpperCase,exclaim);

shout("js每日一題") // JS每日一題 !, 顯示結(jié)果里上面兩個(gè)函數(shù)的特點(diǎn)都應(yīng)用上了
pointfree

代碼組合中有一個(gè)重要的概念pointfree(永遠(yuǎn)不要說出你的數(shù)據(jù)), 它的意思是指函數(shù)無須提及將要操作的數(shù)據(jù)是什么樣的

有點(diǎn)晦澀,我們還是上代碼理解一下

// 我們有一個(gè)將字符轉(zhuǎn)換成大寫并且將其空格轉(zhuǎn)換為"-"的函數(shù)
// 細(xì)節(jié)的同學(xué)應(yīng)該發(fā)現(xiàn)這個(gè)函數(shù)暴露了一個(gè)word形參
// 根據(jù)pointfree定義,此函數(shù)非pointfree模式
let snakeCase = (word) => word.toUpperCase().replace(/s+/ig,"-");

// 下面這個(gè)函數(shù)與上面的功能一致,但我們可以觀察到其沒有數(shù)據(jù)暴露,所以其為pointfree模式
let snakeCase = compose(replace(/s+/ig,"-"),toUpperCase)

說了這么多,他能干什么呢 ? 它能夠幫助我們減少不必要的命名,讓代碼保持簡潔和通用

compose實(shí)現(xiàn)

上面我們都是假設(shè)已經(jīng)存在compose方法, 接下來我們來為其實(shí)現(xiàn)

首先分析其特性

兩個(gè)函數(shù)都有一個(gè)共同的參數(shù)

函數(shù)的執(zhí)行順序從右至左

前面函數(shù)執(zhí)行的結(jié)果交由后面的函數(shù)處理

根據(jù)上面的示例及我們分析的特性來實(shí)現(xiàn)一個(gè)最簡版的

// 這樣子其實(shí)就能滿足我們上面示例的要求了
const compose = function(f, g) {
  return function(x) {
    return f(g(x));
  };
};

結(jié)束了嗎? 并沒有,我們可以看到上面的compose示例都只是傳入了兩個(gè)函數(shù),因?yàn)槲覀兊暮啺鎐ompose實(shí)現(xiàn)也只支持兩個(gè)函數(shù),那么如果我們想要支持一條很長很長的管道的時(shí)候,顯然上面的compose就不夠用了, 接著我們來看優(yōu)秀的開源庫redux的compose實(shí)現(xiàn)

// 摘自 https://github.com/reactjs/redux/blob/master/src/compose.js
export default function compose(...funcs) {
  // 沒有傳入函數(shù)運(yùn)行直接返回參數(shù)
  if (funcs.length === 0) {
    return arg => arg
  }
  // 只傳入一個(gè)函數(shù),就返回其本身
  if (funcs.length === 1) {
    return funcs[0]
  }
  
  // 核心代碼其實(shí)就是一句reduce, reduce特性就是按順序執(zhí)行,并且將結(jié)果傳遞給下一次執(zhí)行, 這里多說一句, reduce順序執(zhí)行多個(gè)相依賴的promise也很好用
  return funcs.reduce((a, b) => (...args) => a(b(...args)))
}
總結(jié)

將多個(gè)單特性的函數(shù)組合到一起的函數(shù)

多個(gè)函數(shù)服務(wù)一組數(shù)據(jù)(共同參數(shù))

不必說出數(shù)據(jù)(pointfree)

函數(shù)從右至左順序執(zhí)行,結(jié)果做為下一個(gè)函數(shù)的參數(shù)

關(guān)于JS每日一題

JS每日一題可以看成是一個(gè)語音答題社區(qū)
每天利用碎片時(shí)間采用60秒內(nèi)的語音形式來完成當(dāng)天的考題
群主在次日0點(diǎn)推送當(dāng)天的參考答案

注 絕不僅限于完成當(dāng)天任務(wù),更多是查漏補(bǔ)缺,學(xué)習(xí)群內(nèi)其它同學(xué)優(yōu)秀的答題思路

點(diǎn)擊加入答題

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/102720.html

相關(guān)文章

  • JS每日一題函數(shù)編程中純函數(shù)如何理解?

    摘要:期函數(shù)式編程中純函數(shù)如何理解概念不依賴執(zhí)行的上下文,也不影響上下文的變量,輸出只由輸入決定代碼理解一下綜上,非純函數(shù)輸入依賴外部變量綜上,非純函數(shù)輸出改變外部變量綜上純函數(shù)輸出輸入不影響外部變量純函數(shù)的好處相信大家發(fā)現(xiàn)了,無論是概念還是代碼 20190313期 函數(shù)式編程中純函數(shù)如何理解? 概念: 不依賴執(zhí)行的上下文,也不影響上下文的變量,輸出只由輸入決定 代碼理解一下 // 綜上,非...

    Zoom 評論0 收藏0
  • 淺析Redux源

    摘要:用法源碼由在年創(chuàng)建的科技術(shù)語。我們除去源碼校驗(yàn)函數(shù)部分,從最終返回的大的來看。這個(gè)返回值無法被識(shí)別。洋蔥模型我們來看源碼源碼每個(gè)都以作為參數(shù)進(jìn)行注入,返回一個(gè)新的鏈。改變原始組數(shù),是一種副作用。 @(Redux)[|用法|源碼] Redux 由Dan Abramov在2015年創(chuàng)建的科技術(shù)語。是受2014年Facebook的Flux架構(gòu)以及函數(shù)式編程語言Elm啟發(fā)。很快,Redux因其...

    lifesimple 評論0 收藏0
  • 前端知識(shí)點(diǎn)(二)

    摘要:在給一個(gè)目標(biāo)對象為構(gòu)造函數(shù)的代理對象構(gòu)造實(shí)例時(shí)觸發(fā)該操作,比如在執(zhí)行時(shí)。 1、元素上下垂直居中的方式有哪些? 元素水平垂直居中的方式有哪些? absolute加margin方案 fixed 加 margin 方案 display:table 方案 行內(nèi)元素line-height方案 flex 彈性布局方案 transform 未知元素寬高解決方案 absolute加mar...

    zacklee 評論0 收藏0
  • 前端知識(shí)點(diǎn)(二)

    摘要:在給一個(gè)目標(biāo)對象為構(gòu)造函數(shù)的代理對象構(gòu)造實(shí)例時(shí)觸發(fā)該操作,比如在執(zhí)行時(shí)。 1、元素上下垂直居中的方式有哪些? 元素水平垂直居中的方式有哪些? absolute加margin方案 fixed 加 margin 方案 display:table 方案 行內(nèi)元素line-height方案 flex 彈性布局方案 transform 未知元素寬高解決方案 absolute加mar...

    lbool 評論0 收藏0
  • 前端知識(shí)點(diǎn)(二)

    摘要:在給一個(gè)目標(biāo)對象為構(gòu)造函數(shù)的代理對象構(gòu)造實(shí)例時(shí)觸發(fā)該操作,比如在執(zhí)行時(shí)。 1、元素上下垂直居中的方式有哪些? 元素水平垂直居中的方式有哪些? absolute加margin方案 fixed 加 margin 方案 display:table 方案 行內(nèi)元素line-height方案 flex 彈性布局方案 transform 未知元素寬高解決方案 absolute加mar...

    Alex 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<