ramda

Author Avatar
Aryb1n 5月 23, 2017

起因

今天在知乎上看到了这个Ramda
是一个函数式的.额,然后就想到了underscore

搜了一下看到了
官网http://ramdajs.com/, github 8k star
所有的方法都支持Curry

哦还搜到了一篇文章
http://www.ruanyifeng.com/blog/2017/03/ramda.html

还有一本gitbook是js函数式
https://www.gitbook.com/book/llh911001/mostly-adequate-guide-chinese/details

想有时间学一下,先mark一下

算了不过了,mark啥,现在就学学呗

等我先写完,,,那个a的href和onclick就学这个

Start

柯里化(写法二)

var R = require('ramda');
// 写法一
R.map(square, [4, 8])

// 写法二
R.map(square)([4, 8])

就是一种

R.func1(func2)(data)

好吧我其实不能接受加减乘除写成这样

R.add(7)(10) // 17
R.subtract(10)(8) // 2
R.multiply(2)(5)  // 10
R.divide(71)(100) // 0.71

这些字符串操作还好

R.split('.')('a.b.c.xyz.d')
// ['a', 'b', 'c', 'xyz', 'd']

R.match(/([a-z]a)/g)('bananas') 
R.match(/[a-z]a/g)('bananas') //我有个问题,加不加这个括号有什么区别呢
// ['ba', 'na', 'na']

R.test(/^x/)('xyz')
// ['a', 'b', 'c', 'xyz', 'd']

函数合成

var negative = x => -1 * x;
var increaseOne = x => x + 1;

var f = R.pipe(Math.pow, negative, increaseOne);
f(3, 4) // -80 => -(3^4) + 1

那么问题来了,我为什么要在这里拷贝拷贝呢,,,需要的时候查api不就行了

然后看到他的另一篇
http://www.ruanyifeng.com/blog/2017/03/pointfree.html
然后觉得有点意思

叫做Pointfree

有一例子感觉挺好的

var str = 'Lorem ipsum dolor sit amet consectetur adipiscing elit';
var getLongestWordLength = R.pipe(
  R.split(' '),
  R.map(R.length),
  R.reduce(R.max, 0)
);
getLongestWordLength(str);
// 11

确实很语义化,很酷炫,,,

后面还有个很长的例子,,,很酷炫