从函数式编程到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),又称为泛函编程,是一种编程范式.早在很久以前就提出了函数式编程这个概念了 ...
随机推荐
- Confluence 6 查看索引和提示
查看索引 Confluence 使用被称为 Lucene 的搜索引擎.如果你希望在你的 Confluence站点中查看更多有关索引的细节,你可以下载并且运行 Luke.Luke 是一个开发和诊断工具, ...
- LeetCode(112):路径总和
Easy! 题目描述: 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及 ...
- python网络爬虫笔记(六)
1.获取属性如果不存在就返回404,通过内置一系列函数,我们可以对任意python对象进行剖析,拿到其内部数据,但是要注意的是,只是在不知道对象信息的时候,我们可以获得对象的信息. 2.实例属性和类属 ...
- servlet在地址栏填写参数
单个参数:以"?"开头+参数名+"="符号+参数值 例如 https://i.cnblogs.com/EditPosts.aspx?opt=1 多个参数:以&q ...
- PV-UV-QPS
QPS:每秒查询率(Query Per Second) ,每秒的响应请求数,也即是最大吞吐能力.QPS = req/sec = 请求数/秒QPS统计方式 [一般使用 http_load 进行统计]QP ...
- 修改Linux服务器的ttl值
[root@test_android_client_download ~]# cat /etc/sysctl.conf |grep net.ipv4.ip_default_ttlnet.ipv4.ip ...
- Oracle数据重复,只取一条
--方法一 select * from tb_supply where rowid=any(select max(rowid) from tb_supply group by phone_id) -- ...
- Redis分布式锁(ServiceStack.Redis实现)
1.设计思路 由于Redis是单线程模型,命令操作原子性,所以利用这个特性可以很容易的实现分布式锁.A用户端在Resdis写入1个KEY,其他的用户无法写入这个KEY,实现锁的效果.A用户使用完成后释 ...
- adb devices unauthorized解决办法
进行Android项目调试时,连接完设备,进行adb install ******.apk时,偶遇 adb devices unauthorized 这个小东西,解决办法:将手机设置->辅助功能 ...
- 【前端基础系列】slice方法将类数组转换数组实现原理
问题描述 在日常编码中会遇到将类数组对象转换为数组的问题,其中常用到的一种方式使用Array.prototype.slice()方法. 类数组对象 所谓的类数组对象,JavaScript对它们定义为: ...