使用compose有什么好处?

托马斯·彼得

我正在学习使用Ramda并遇到过compose但我无法把握它的目的

let value = R.compose( calledThird, calledSecond, calledFirst('hello') );

// vs

let value = calledThird( calledSecond( calledFirst('hello') ) );

纯粹是允许欺骗吗?可能...

let curried = R.compose( calledThird, calledSecond, calledFirst );

curried('hello');

还有其他目的吗?

斯科特·索耶(Scott Sauyet)

您的第二个示例正是这样做的原因,尽管实际上这与curring无关。

功能组合使您可以从更简单的功能中构建更复杂的功能。

假设您有一些需要排序的数据类型,例如约会的集合。假设您已经具有一个sortByDate函数和一个reverse函数,则可以编写sortByDateDescending

var sortByDateDescending = function(appointments) {
    return reverse(sortByDate(appointments));
}

或在ES6中:

const sortByDateDescending = appointments => reverse(sortByDate(appointments));

这没有错。但是,如果您要用一个compose助手来编写它,它有几个优点:

var sortByDateDescending = compose(reverse, sortByDate);

首先,它显然更短,并且随着您添加更多功能(尤其是使用es6之前的代码)时,差异将变得更大。

但更重要的是,这使您可以专注于有意义的事情。您正在此处合并功能最终将要传递的数据是目标,但是在构建新功能时,主要是分散注意力。

通过这种方式编写,您可以专注于发生的事情:按日期对列表进行排序,然后反转结果。

更加专注于函数式编程的语言使这一过程变得更加简单,使用了一个不引人注目的运算符,而不是像这样的函数compose在Haskell中,等效项看起来像

sortByDateDescending = reverse . sortByDate

但是Javascript无法提供这种优雅。我们能做的最好的事情就是创建类似的函数compose(或它的反序双胞胎pipe。)。

对Ramda帖子的介绍提供了更多使用这种样式的示例。


顺便说一句,咖喱完全是另一回事。这是一种使在此类合成中重用功能更加容易的技术。但这主要是分散注意力。如果你有兴趣,我也有一个岗位上的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用UITableViewController有什么好处?

来自分类Dev

使用ObjectSet有什么好处

来自分类Dev

使用arrayWithCapacity有什么好处

来自分类Dev

使用Elixir的“ with”有什么好处

来自分类Dev

使用Cordova有什么好处?

来自分类Dev

在解析JSON时使用NSDictionary有什么好处或好处?

来自分类Dev

使用QueudSynchronizer实现CountLatch有什么好处?

来自分类Dev

使用Integer时IntegerCache有什么好处?

来自分类Dev

使用设计文档有什么好处?

来自分类Dev

使用结果有什么好处?

来自分类Dev

在Android中使用BroadcastReceiver有什么好处?

来自分类Dev

使用--grep-reflog有什么好处?

来自分类Dev

使用Gunicorn + Nginx + Flask有什么好处?

来自分类Dev

使用Spring PropertySource有什么好处?

来自分类Dev

在DRF中使用HyperlinkedModelSerializer有什么好处?

来自分类Dev

在python中使用*或**有什么好处吗?

来自分类Dev

在Erlang中使用RabbitMQ有什么好处?

来自分类Dev

使用关键字“ this”有什么好处?

来自分类Dev

使用Sharpsign Dot有什么好处?

来自分类Dev

(Python)使用静态方法有什么好处?

来自分类Dev

使用邮件分发服务有什么好处?

来自分类Dev

通过DVI使用HDMI有什么好处?

来自分类Dev

使用相同的内存模块有什么好处?

来自分类Dev

使用结果有什么好处?

来自分类Dev

使用CDH(cloudera)有什么好处?

来自分类Dev

使用#define声明常量有什么好处?

来自分类Dev

使用这种SQL样式有什么好处?

来自分类Dev

在Redux中,使用actionCreators有什么好处?

来自分类Dev

在Erlang中使用RabbitMQ有什么好处?