ramda
起因
今天在知乎上看到了这个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
确实很语义化,很酷炫,,,
后面还有个很长的例子,,,很酷炫