从函数式编程到Ramda函数库(二)

  Ramda 基本的数据结构都是原生 JavaScript 对象,咱们经常使用的集合是 JavaScript 的数组。Ramda 还保留了许多其余原生 JavaScript 特性,例如,函数是具备属性的对象。javascript

  今天我来讲说javascript函数式的方法库--Ramda。Ramda主要特性以下:java

  1. Ramda 强调更加纯粹的函数式风格。数据不变性和函数无反作用是其核心设计理念。这能够帮助你使用简洁、优雅的代码来完成工做。
  2. Ramda 函数自己都是自动柯里化的。这可让你在只提供部分参数的状况下,轻松地在已有函数的基础上建立新函数。
  3. Ramda 函数参数的排列顺序更便于柯里化。要操做的数据一般在最后面。

  Ramda的api很是的实用且中文文档更新迅速,相信使用过Ramda的童鞋都已经喜欢这个库了。这里感谢Ramda中文文档的维护者王增迪先生,这个推荐王增迪先生的QQ讨论群 114706031,欢迎你们在此群讨论一切与函数式编程相关的问题。编程

Ramda的简单使用

  Ramda的安装这里就很少说,文档很详细。下面以R.equals()、R.zip()和R.useWith()方法来打来Ramda的大门。api

1.R.equals():判断两个值是否相等(支持对象的对比)

R.equals(5,5) // => true 函数多参比较
R.equals(5)(5) // => true 柯里化支持函数单参比较
R.equals(4)('8') // => false
R.equals([])([]) // => true 支持对象对

  经过一个函数就能够优雅的判断对象是否相等,省去了繁琐的对象对比;数组

2.R.zip():将两个数组相同索引位置结合,组成新的数组(数字长度与两个数组较短的那个长度相同)

R.zip([1,2])(['a','b']) // => [[1,'a'],[2,'b']] 长度为2
R.zip([1,2,3])(['a','b']) // => [[1,'a'],[2,'b']] 长度为2,由于两个数组较短的那个长度为2

  对于常常操纵数组的人来讲,这是一个经常使用且实用的小方法,让咱们避开了显式的使用循环对代码形成的不整洁。数据结构

3.R.useWith():接受一个函数fn和一个函数数fnlist组做为参数,返回柯里化函数,该函数接受的参数先分别通过fnlist,获得的结果数组做为fn的参数。下面实现平方和计算

let square = x => x * x;
let result = R.useWith(R.add,[square,square]);
result(3,4); // => 25

  Ramda的做者几乎整理了全部好用的小方法便于咱们计算。
  我这里只是扔个转头,相信你们已经在脑海里有了初步的认识,而且已经意识到本身的代码的某些地方是否是应该作一些修改。函数式编程

  其实我想说的就这个多,函数式编程和Ramda当然有不少优势,对于常常操字符串、数组、对象和方法的代码来讲,能够减小代码量,让代码整齐划一,对于方法库的编写也是同样。可是对于不多字符串、数组、对象和方法的代码来讲,使用这些有刻意增长代码难度的嫌疑。因此权衡使用函数式编程。函数

 

原创博客:转载请注明从函数式编程到Ramda函数库(二)spa

相关文章
相关标签/搜索