欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ramda.js 函数式编程 (==>在angular中引入)

程序员文章站 2022-03-22 23:14:51
...

引入柯里化(Currying):

Currying 为实现多参函数提供了一个递归降解的实现思路——把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数。换句话说,也就是只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数

// 柯里化之前
function add(x, y) {
  return x + y;
}

add(1, 2) // 3

// 柯里化之后
function addX(y) {
  return function (x) {
    return x + y;
  };
}

addX(2)(1) // 3

// 另一种用法
var addTen = addX(10);
addTen(2) // 12

var addOne = addX(1);
addOne(5) = 6;
// 这里我们定义了一个 addX 函数,它接受一个参数并返回一个新的函数。
// 调用 addX 之后,返回的函数就通过闭包的方式记住了 addX 的第一个参数。

下文正式开始讲ramda:

1. 

ramda是一个建立在JavaScript语言现有功能和算法之上的的扩展。

ramda的官网:https://ramdajs.com/repl/?v=0.23.0。这个网站支持在线测试ramda。

特点:1. ramda的所有方法都支持柯里化;2. Ramda 的数据一律放在最后一个参数,理念是"function first,data last"。

 

2. 

在angular项目中使用:npm install ramda,然后使用 import * as R from 'ramda' 引入 ramda。或者更好的方式是,通过 import { functionName } from 'ramda' 只引入必需的函数。

 

3.

ramda的API功能有如下几类:比较运算,数学运算,逻辑运算,字符串,函数,数组,对象。具体的请见官网的API文档。

其中特殊的一个是R._,是柯里化函数的参数占位符。

R.__ 是一个placehodler,可以让一个函数只传入传入部分参数,由于ramda是自动柯里化的,所以会由被placeholder占位的函数返回一个新的函数来接收被占位的数据。

 

4.

下面看一个实例感受一下ramda的好处: 

Ramda.js 函数式编程 (==>在angular中引入)

拆分一下上述ramda的求值过程:

R.compose意思是组合,相当于管道的意思,前一个操作的结果是后一个操作的数据,但是与R.pipe不同的是这个管道是从右向左进行数据流动的

R.contains是一个判读元素是否在array中,返回一个bool值

R.__ 是一个placehodler,可以让一个函数只传入传入部分参数,由于ramda是自动柯里化的,所以会由被placeholder占位的函数返回一个新的函数来接收被占位的数据。

R.path 是从一个属性路径中取出一个值

整个表达式的意思就是,过滤myarray,条件是满足 name.lastname 的值在 [‘jak’,’Jonh’,’M’] 中。

 

 

相关标签: ts