百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>JS教程> JavaScript函数式编程中代码组合(compose)的懂得
分享文章到:

JavaScript函数式编程中代码组合(compose)的懂得

发布时间:09/01 来源:未知 浏览: 关键词:
本篇文章给大家带来的内容是关于JavaScript函数式编程中代码组合(compose)的懂得,有必然的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。

函数式编程中代码组合(compose)怎样懂得?

定义: 望文生义,在函数式编程中,Compose就是将几个有特点的函数拼凑在一起, 让它们结合, 发生一个崭新的函数

代码懂得:

// 一个将小写转大写的函数
let toUpperCase = (x) => x.toUpperCase();

// 一个在字符后加!的函数
let exclaim = (x) => x + '!';

// 将两个函数组合起来, 这里假设我们实现了compose
let shout = compose(toUpperCase,exclaim);

shout('js每日一题') // JS每日一题 !, 显示结果里上面两个函数的特点都利用上了

pointfree

代码组合中有一个重要的概念pointfree(永久不要说出你的数据), 它的意思是指函数不必说起将要操纵的数据是啥样的

有点晦涩,我们还是上代码懂得一下

// 我们有一个将字符转换成大写并且将其空格转换为'-'的函数
// 细节的同学应当发明这个函数显露了一个word形参
// 按照pointfree定义,此函数非pointfree模式
let snakeCase = (word) => word.toUpperCase().replace(/\s+/ig,'-');

// 下面这个函数与上面的功效一致,但我们可以视察到其没有数据显露,所以其为pointfree模式
let snakeCase = compose(replace(/\s+/ig,'-'),toUpperCase)

说了这么多,他能干什么呢 ? 它能够帮忙我们减少不必要的命名,让代码保持简约和通用

compose实现

上面我们都是假设已经存在compose办法, 接下来我们来为其实现

第一剖析其特性

  • 两个函数都有一个共同的参数
  • 函数的施行次序从右至左
  • 前面函数施行的结果交由后面的函数处置

按照上面的示例及我们剖析的特性来实现一个最简版的

// 这模样其实就能知足我们上面示例的要求了
const compose = function(f, g) {
  return function(x) {
    return f(g(x));
  };
};

完毕了吗? 并没有,我们可以看到上面的compose示例都只是传入了两个函数,由于我们的简版compose实现也只支撑两个函数,那么假如我们想要支撑一条很长很长的管道的时候,明显上面的compose就不足用了, 接着我们来看优异的开源库redux的compose实现

// 摘自 https://github.com/reactjs/redux/blob/master/src/compose.js
export default function compose(...funcs) {
  // 没有传入函数运转直接返回参数
  if (funcs.length === 0) {
    return arg => arg
  }
  // 只传入一个函数,就返回其本身
  if (funcs.length === 1) {
    return funcs[0]
  }
  
  // 中心代码其实就是一句reduce, reduce特性就是按次序施行,并且将结果传递给下一次施行, 这里多说一句, reduce次序施行多个相依靠的promise也很好用
  return funcs.reduce((a, b) => (...args) => a(b(...args)))
}

总结

将多个单特性的函数组合到一起的函数

多个函数效劳一组数据(共同参数)

不必说出数据(pointfree)

函数从右至左次序施行,结果做为下一个函数的参数

本篇文章到这里就已经全部完毕了,更多其他出色内容可以关注PHP中文网的JavaScript教程视频栏目!

以上就是JavaScript函数式编程中代码组合(compose)的懂得的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板