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

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

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

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

Ramda的简单使用

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

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函数库(二)

从函数式编程到Ramda函数库(二)的更多相关文章

  1. 从函数式编程到Ramda函数库(一)

    函数式编程是种编程方式,它将电脑运算视为函数的计算.函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值).和指令式编程相比, ...

  2. 理解函数式编程中的函数组合--Monoids(二)

    使用函数式语言来建立领域模型--类型组合 理解函数式编程语言中的组合--前言(一) 理解函数式编程中的函数组合--Monoids(二) 继上篇文章引出<范畴论>之后,我准备通过几篇文章,来 ...

  3. Python之路(第七篇)Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

    一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") ret ...

  4. Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

    Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print(" ...

  5. 【Python】[函数式编程]高阶函数,返回函数,装饰器,偏函数

    函数式编程高阶函数 就是把函数作为参数的函数,这种抽象的编程方式就是函数式编程.--- - -跳过,不是很理解,汗 - ---

  6. python函数式编程之返回函数、匿名函数、装饰器、偏函数学习

    python函数式编程之返回函数 高阶函数处理可以接受函数作为参数外,还可以把函数作为结果值返回. 函数作为返回值 def laxy_sum(*args): def sum(): ax = 0; fo ...

  7. Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数

    Python 函数式编程 2 返回函数 返回函数的意思就是:函数作为返回值.(高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.) 举个例子:实现一个可变参数的求和. 正常的函数: de ...

  8. 跟着ALEX 学python day3集合 文件操作 函数和函数式编程 内置函数

    声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  一. 集合 集合是一个无序的,不重复的数据组合,主要作用如下 1.去重 把一个列表变成集合 ,就自动去重 ...

  9. JavaScript函数式编程(纯函数、柯里化以及组合函数)

    JavaScript函数式编程(纯函数.柯里化以及组合函数) 前言 函数式编程(Functional Programming),又称为泛函编程,是一种编程范式.早在很久以前就提出了函数式编程这个概念了 ...

随机推荐

  1. Vue2 Virtual DOM

    vue 虚拟dom 的重点 是以 javascript 对象模拟 dom 节点. //用Javascript代码表示DOM节点的伪代码 Let domNode = { tag: 'ul' attrib ...

  2. kafka消息存储与partition副本原理

    消息的存储原理: 消息的文件存储机制: 前面我们知道了一个 topic 的多个 partition 在物理磁盘上的保存路径,那么我们再来分析日志的存储方式.通过 ll /tmp/kafka-logs/ ...

  3. (转)webpack和webpack-simple区别(如何引入css文件)

    博主最近研究vue+webpack的时候想引入css文件死活引入不出来,在webpack-simple那里却能引得出来,十分的纳闷,然后细心的调试了一下,原来这webpack和webpack-simp ...

  4. C++ Primer 笔记——智能指针

    1.新的标准库提供了两种智能指针类型,shared_ptr允许多个指针指向同一个对象,unique_ptr则独占所指的对象.标准库还定义了一个名为weak_ptr的伴随类,它是一种弱引用,指向shar ...

  5. String 类的实现(2)引用计数与写时拷贝

    1.引用计数 我们知道在C++中动态开辟空间时是用字符new和delete的.其中使用new test[N]方式开辟空间时实际上是开辟了(N*sizeof(test)+4)字节的空间.如图示其中保存N ...

  6. Spring Cloud与Spring Boot版本匹配关系

    Spring Cloud是什么? “Spring Cloud provides tools for developers to quickly build some of the common pat ...

  7. Quartz.NET(任务调度)与Topshelf(服务)的综合使用

    http://www.cnblogs.com/jys509/p/4628926.html http://cron.qqe2.com/ Quartz_Topshlf_Demo.7z

  8. [转]EndNote导入IEEE文献的方法

    EndNote导入IEEE文献的方法.IEEE虽然可以批量导出,但是批量导出的是CSV格式.如果想导入到EndNote,需要一个个文献的导入.本文介绍一下IEEE导出文献并导入到EndNote的方法. ...

  9. 【AtCoder】ARC073

    ARC 073 C - Sentou 直接线段覆盖即可 #include <bits/stdc++.h> #define fi first #define se second #defin ...

  10. 【Android】Android自定义属性,attr format取值类型

    1. reference:参考某一资源ID. (1)属性定义: <declare-styleable name = "名称"> <attr name = &quo ...