从函数式编程到Ramda函数库(二)
Ramda 基本的数据结构都是原生 JavaScript 对象,我们常用的集合是 JavaScript 的数组。Ramda 还保留了许多其他原生 JavaScript 特性,例如,函数是具有属性的对象。
今天我来说说javascript函数式的方法库--Ramda。Ramda主要特性如下:
- Ramda 强调更加纯粹的函数式风格。数据不变性和函数无副作用是其核心设计理念。这可以帮助你使用简洁、优雅的代码来完成工作。
- Ramda 函数本身都是自动柯里化的。这可以让你在只提供部分参数的情况下,轻松地在已有函数的基础上创建新函数。
- 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函数库(二)的更多相关文章
- 从函数式编程到Ramda函数库(一)
函数式编程是种编程方式,它将电脑运算视为函数的计算.函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值).和指令式编程相比, ...
- 理解函数式编程中的函数组合--Monoids(二)
使用函数式语言来建立领域模型--类型组合 理解函数式编程语言中的组合--前言(一) 理解函数式编程中的函数组合--Monoids(二) 继上篇文章引出<范畴论>之后,我准备通过几篇文章,来 ...
- Python之路(第七篇)Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数
一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") ret ...
- Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数
Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print(" ...
- 【Python】[函数式编程]高阶函数,返回函数,装饰器,偏函数
函数式编程高阶函数 就是把函数作为参数的函数,这种抽象的编程方式就是函数式编程.--- - -跳过,不是很理解,汗 - ---
- python函数式编程之返回函数、匿名函数、装饰器、偏函数学习
python函数式编程之返回函数 高阶函数处理可以接受函数作为参数外,还可以把函数作为结果值返回. 函数作为返回值 def laxy_sum(*args): def sum(): ax = 0; fo ...
- Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数
Python 函数式编程 2 返回函数 返回函数的意思就是:函数作为返回值.(高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.) 举个例子:实现一个可变参数的求和. 正常的函数: de ...
- 跟着ALEX 学python day3集合 文件操作 函数和函数式编程 内置函数
声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 一. 集合 集合是一个无序的,不重复的数据组合,主要作用如下 1.去重 把一个列表变成集合 ,就自动去重 ...
- JavaScript函数式编程(纯函数、柯里化以及组合函数)
JavaScript函数式编程(纯函数.柯里化以及组合函数) 前言 函数式编程(Functional Programming),又称为泛函编程,是一种编程范式.早在很久以前就提出了函数式编程这个概念了 ...
随机推荐
- 《MySQL5.7从入门到精通(视频教学版)》
· 一:书籍PDF获取途径 pdf 文档 在 此QQ群(668345923) 的群文件里面 学习视频资源 二:书籍介绍 本书主要包括MySQL的安装与配置.数据库的创建.数据表的创建.数据类型和运算符 ...
- 遇到的一个移动端从下往上过渡的弹框,在Android下过渡动画的优化问题。
优化之前: /* 分享弹框样式 */ .popUpDiv { width: 100vw; height: 100vh; transition: all 0.5s ease; position: fix ...
- ionic在ios侧滑页面空白 禁用视图滑动后退
本人在ios10左右滑动的时候,经常出现左滑页面后退,然后整个页面空白现象,只能强行退出,并重新登录,最简单的方法就是禁用侧滑后退这个功能: 在app.js上config增加如下: $ionicCon ...
- 对一个元素 同时添加单击onclick 和 双击ondblclick 触发冲突的解决
需求说明:单击列表项内容后,吧啦吧啦,双击列表项内容后,巴拉巴拉巴拉~~~ 解决思路:卧槽 ,其实我是没思路的,当时唯一的想法就是,看个人点击鼠标的速度了,双击快一点,触发双击事件ლ(′◉❥◉`ლ), ...
- binlog2sql之MySQL数据闪回实践
DBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要能快速回滚.传统恢复方法是利用备份重搭实例,再应用去除错误sql后的binlog来恢复数据.此法费时费力,甚至需要停机维护 ...
- Play框架--初学笔记
目录结构 web_app 根目录 | sbt SBT Unix 批处理脚本用于启动sbt-launch.jar | sbt.bat SBT Windows 批处理脚本用于启动sbt-launch.ja ...
- IDEA窗口重置
- Android NDK笔记
目录 Android NDK笔记 AOSP Android repository Android SDK / SDK Tools NDK cmake && ninja lldb adb ...
- vi不保存退出
To quit the vi editor without saving any changes you've made If you are currently in insert or appen ...
- JavaScript中this 详解
涵义 this 关键字是一个非常重要的语法点.毫不夸张地说,不理解它的含义,大部分开发任务都无法完成. 首先, this 总是返回一个对象,简单说,就是返回属性或方法“当前”所在的对象. this.p ...