资讯专栏INFORMATION COLUMN

fp->compose

yuxue / 424人阅读

摘要:说明数据和操作解耦抽象化的功能函数组件更易复用和维护。说明一言以蔽之就是为每个参数返回一个函数。总结通过已有的函数进行组合最大程度的复用已有函数需要提前构思好抽象单元函数。

引言

在fp编程中,compose是一个重要应用场景,下面谈论一些个人理解。

const R=require("ramda");
const data=[{
    name:"gcy",
    sex:"male"
},{
    name:"ycg",
    sex:"female"
}]
const getName=R.compose(
    R.map(d => d.name),
    R.filter(d => d.sex=="male")
);

console.log(getName(data));

说明 数据和操作解耦,抽象化的功能函数组件更易复用和维护。

上面filter做到了只接受谓词函数作为唯一约束,自由变量是如何被过滤,这涉及到curry,如下所示。

var _ = require("lodash");

const Rfilter=function (predicate) {
    return function (data) {
        return _.filter(data,predicate);
    }
}
console.log(Rfilter( d => d.name=="gcy")(data));

说明 curry一言以蔽之就是为每个参数返回一个函数。好处是可以依赖透明,无观察副作用,哈哈,其实所有fp纯函数都有这个特性,其次简化函数使用难度(相对来说,为curry而curry就得不偿失了)和方便compose。

const {comp,pipeline,partial,inc,filter,sort}=require("mori");
const todos=[{
    name:"g1",
    age:"20"
},{
    name:"g2",
    age:"21"
},{
    name:"g1",
    age:"22"
}];
const sortByname=partial(sort,(x,y) => x.name x.age>=21);
console.log(pipeline(todos,filterByAge,sortByname))

说明 无论普通的compose,partial,还是curry可读性都不好,上面既具有组合性,同时管道式的阅读方式看起来顺畅,而不是自内向外,自右向左的函数式组合读法。

总结

通过已有的函数进行组合,最大程度的复用已有函数,需要提前构思好抽象单元函数。最近挺忙的,维护一后端写的代码A(){B()|C()},B(){C()},C(){D()}都是些全局函数,然后依赖一些全局变量,有极大的观察副作用,同时没有模块化,零件无组织的散落个各个文件中,典型的反例,感触颇深(>﹏<)。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/83337.html

相关文章

  • 在python中读取和写入CSV文件详情

      小编写这篇文章的主要目的,主要是给大家去做一个解答,主要利用python去读取和载入数据,其中包括读取和写入CSV文件,具体的一些详细内容介绍,下面就给大家详细解答下。  前言  CSV(Comma-Separated Values)即逗号分隔值,一种以逗号分隔按行存储的文本文件,所有的值都表现为字符串类型(注意:数字为字符串类型)。如果CSV中有中文,应以utf-8编码读写.  1.导入CS...

    89542767 评论0 收藏0
  • Python计算AUC的三种方式

      对于很多从事Python的人来说,有很多的人想要去进阶的,比如学习跟多的一些知识,比如,我们在工作中会遇到,使用Python计算AUC的三种方式,下面给大家做出一个解答。  介绍  AUC(Area Under Curve),其实就是ROC曲线围成的和下坐标轴围成的一个面积,这个面积的数值一般是不会大于1的。  当然,ROC曲线基本上都在y=x,这条直线上面的一个正上方,因此AUC的正确值应该...

    89542767 评论0 收藏0
  • python Opencv实现停车位识别思路详解

      小编写这篇文章的一个主要目的,主要是给大家就相关的具体内容做出一些详细解答,比如了解使用python的相关知识,主要是涉及到python Opencv的一些相关知识,比如使用python Opencv实现停车位识别,就具体的内容,下面给大家详细解答下。  1.怎么去实现  (1)第一是需要用到一个处理画框的程序,将图片中的有车和无车的停车位给画出来,并且保存坐标(如果画错了,将鼠标移至要删除的...

    89542767 评论0 收藏0
  • Python海象运算符的用法教程

      算法目前是比较火的一个领域了,其中,python作为算法的一种延伸,其应用范围还是比较的广泛的。那么,它其中有一个就是海象运算符,它的运算教程是什么呢?下面给大家一一的列举,大家要仔细的阅读哦。  前言  大家好,我是闲欢,你们的老相识呀!  海象可谓是最大的哺乳动物了,有人称它是北半球的土著居民。它圆头,短而阔的嘴巴,粗大的鼻子,上犬齿形成长达40厘米-90厘米的獠牙,每只4公斤以上。雄海象...

    89542767 评论0 收藏0
  • fp->monadic

    摘要:是可以被的容器类型。出自范畴论数学的一个分支满足一些定律。满足的定律是一种特殊的可以铺平的结果。说明如果用普通第一层异常时会连续执行通过的方式可以在异常发生时无论怎么最后还是它自己从而可以在异常发生时避免不必要的错误执行。 functor functor是可以被map over的容器类型。 关于这句话比较难理解的是,什么是map over? (a -> b) -> f a -> f b...

    DC_er 评论0 收藏0

发表评论

0条评论

yuxue

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<