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. Django项目的创建及基本使用

    安装步骤 Django是Python进行Web开发的框架,目前应用比较广泛.使用python进行Web开发,能够很快的搭建所需的项目,可以运用于原型开发,也可以部署到实际的应用环境. 使用Django ...

  2. SpringBoot全局日志管理(AOP)

    1.在pom.xml中引入aop的jar包 <dependency> <groupId>org.springframework.boot</groupId> < ...

  3. bzoj3991 lca+dfs序应用+set综合应用

    /* 给定一棵树,树上会出现宝物,也会有宝物消失 规定如果要收集树上所有宝物,就要选择一个点开始,到每个宝物点都跑一次,然后再回到那个点 现在给定m次修改,每次修改后树上就有一个宝物消失,或者一个宝物 ...

  4. python中range()函数的用法

    python中range()函数可创建一个整数列表,一般用在for循环中. range()函数语法: range(start,stop[,step]) 参数说明: star: 计数从star开始.默认 ...

  5. python—命名规范

    文件名全小写,可使用下划线 包应该是简短的.小写的名字.如果下划线可以改善可读性可以加入.如mypackage. 模块与包的规范同.如mymodule. 类总是使用首字母大写单词串.如MyClass. ...

  6. KnockoutJs学习笔记(五)

    作为一名初学者来说,一篇篇的按顺序看官网上的文档的确是一件很痛苦的事情,毕竟它的排列也并非是由浅及深的排列,其中的顺序也颇耐人寻味,于是这篇文章我又跳过了Reference部分,进而进入到具体的bin ...

  7. 美国主机BlueHost vs HostEase

    网站备案对于大部分个人站长而言,花费成本高.程序复杂,因此在挑选主机时,常选择免备案IDC服务商,如美国.香港主机,且前几日国内某免备案机房因个别网站涉及非法言论而配合相关部门采取停网整顿等,为此站长 ...

  8. vi不保存退出

    To quit the vi editor without saving any changes you've made If you are currently in insert or appen ...

  9. 一脸懵逼加从入门到绝望学习hadoop之Caused by: java.net.UnknownHostException: master报错

    windows下开发hadoop应用程序,hadoop部署在linux环境中, 在运行调试时可能会出现无法找到主机,类似异常信息如下: java.net.UnknownHostException: u ...

  10. javascript OOP实例—探测器

    <script> /*所有探测器都有探测的方法和分析的方法,分析当前的浏览器环境,不管是浏览器还是nodejs*/ /*container容器探测器*/ /*link链接探测器*/ /*外 ...