fp->compose

弁言

在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<y.name);
const filterByAge= partial(filter,x => x.age>=21);
console.log(pipeline(todos,filterByAge,sortByname))

申明 不管一般的compose,partial,照样curry可读性都不好,上面既具有组合性,同时管道式的浏览体式格局看起来顺畅,而不是自内向外,自右向左的函数式组合读法。

总结

经由过程已有的函数举行组合,最大水平的复用已有函数,须要提早构想好笼统单位函数。近来挺忙的,保护一后端写的代码A(){B()|C()},B(){C()},C(){D()}都是些全局函数,然后依靠一些全局变量,有极大的视察副作用,同时没有模块化,零件无构造的散落个各个文件中,典范的反例,感想颇深(>﹏<)。

    原文作者:jsdt
    原文地址: https://segmentfault.com/a/1190000009667461
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞