万物皆可柯里化的Ramda.js及传参详解

万物皆可柯里化的Ramda.js及传参详解

本文主要介绍Ramda.js的详细讲解,在这里一切都可以关联起来。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。

目录

先介绍函数,数据lastAPI

引言

前段时间我们写了几篇关于RxJS的文章。RxJS api操作符很难理解。RxJS是函数式编程中的lodash库,免去了“计时”带来的麻烦。其核心思想是:功能反应。

本文讲的不是RxJS,而是另一个函数式编程库,Ramda.js它也可以通过与loadsh的对比来理解,但是它的设计思路不同。它最大的特点就是所有的功能都可以在科里奥利里传递!为了实践函数式编程的思想。

往下看,后面就能明白了:Ramda所有API都可以关联的意义。

Function first,Data last

在洛达什,我们这样写,

var平方=n=gtn * n

_.地图([4,8],正方形)

参数第一,执行函数第二。

在Ramda中,强调的是函数在前,参数在后。

这样有什么好处?

只是为了更好的实现:柯里化。内化只需要逐个追加参数。

var R=require( ramda );

R.map(正方形,[4,8])

//相当于

var R=require( ramda );

R.map(正方形)([4,8])

再给我举个栗子:

var R=require( ramda );

常数奇数=x=gtx%2===1

const data=[3,5,6];

R.filter(奇数,数据);//[3, 5]

//相当于

R.filter(奇数)(数据);//[3, 5]

//你也可以延迟通话

const filter1=R.filter(奇数);

//filter1等待传入的参数。

//稍后将传入数据

const filter2=filter1(数据)

如果不借用Ramda.js,需要自己实现corelation,那就麻烦了:

const _ curry=f=gta=gtb=gt女(阿,乙)

常数奇数=x=gtx%2===1

const _filter=_curry( (fn,arr)=gt;阵列滤波器(fn));

_filter(奇数)([3,5,6]) //[3,5]

Ramda强调R.api(fn,data)的范式;

API

来看看有哪些神奇好用又常用的API~ Ramda有~

地图

让map的每个成员轮流执行一个功能;

const double=x=gtx * 2;

R.map(double,[1,2,3]);//=gt;[2, 4, 6]

R.map(double,{x: 1,y: 2,z:3 });//=gt;{x: 2,y: 4,z: 6}

过滤器

用于过滤;

const isEven=n=gtn % 2===0;

R.filter(isEven,[1,2,3,4]);//=gt;[2, 4]

R.filter(isEven,{a: 1,b: 2,c: 3,d:4 });//=gt;{b: 2,d: 4}

增加

总和;

R.add(2,3);//=gt;五

(7)(10);//=gt;17

多样地

正交;

乘法运算(2)(5) //10

构成

功能组合,从右到左;

R.compose(Math.abs,R.add(1),R.multiply(2))(-4)

//|-4*2 1|,等于7

功能组合,从左到右;

var负数=x=gt-1 * x;

var increaseOne=x=gt。x 1;

var f=R.pipe(Math.pow,negative,increaseOne)(3,4);

//-(3 ^ 4)1,等于-80

咖喱菜肴

将多个参数转换成单个参数。

const addFourNumbers=(a,b,c,d)=gt;a b c d;

const curriedAddFourNumbers=r . curry(addFourNumbers);

curriedAddFourNumbers(1,2)(3)(4)

Ramda还有其他丰富的API,也可以结合compose/pipe定制特定的功能函数。这些方法可以用来简化程序,使代码具有功能性。

以上例子都可以在jsrun.net/DTNKp/edit;在线测试

查看更多Ramda api文档:ramda.cn/

以上是Ramda.js解释科里奥利一切的详细内容。更多关于Coriolis Ramda.js的信息,请关注我们的其他相关文章!

万物皆可柯里化的Ramda.js及传参详解