![]()
内容推荐 《JavaScript ES8函数式编程实践入门(第2版)》探讨函数式编程的概念和JavaScript语言的函数性。首先介绍函数式编程的概念,分析命令式编程和函数式编程之间的主要区别。之后直接进入JavaScript函数,阐述如何使用ES8编写函数。接下来介绍高阶函数,并讨论“函数作为数据”如何提供更多的可能性。 本书带你使用闭包构建高阶函数,并探讨数组以及可与数组一起使用的API;介绍如何使用currying与partial应用程序把一个函数转换为另一个函数。本书还详细讨论compose函数、函子和Monad。在深入探讨函子的应用后,本书讲解ES8提供的新特性,如async、await。 本书的最后几章展示如何使用函数式工具包构建一个小型库,以开发Web应用程序,还讲解测试函数式代码的技巧。 主要内容 探讨函数式编程的概念,如字符串填充和异步函数 解析如何在JavaScnipt中处理函数 创建一个函数库来模拟underscore.js 深入探讨ES8的新特性,如扩展运算符和Generator 遵循函数范式,创建一个工作方式类似于react-redux模式的库 作者简介 安托·阿拉文思Anto Aravinth从事软件行业已经6年多了。他开发了许多用最新技术编写的系统。Anto了解JavaScript的基础知识及其工作方式,并培训了许多人。Anto在业余时间也做OSS,他喜欢打乒乓球。 目录 第1章 函数式编程简介 1.1 什么是函数式编程?它为何重要 1.2 引用透明性 1.3 命令式、声明式与抽象 1.4 函数式编程的好处 1.5 纯函数 1.5.1 纯函数生成可测试的代码 1.5.2 合理的代码 1.6 并发代码 1.7 可缓存 1.8 管道与组合 1.9 纯函数是数学函数 1.10 我们要构建什么 1.11 JavaScript是函数式编程语言吗 1.12 小结 第2章 JavaScript函数基础 2.1 ECMAScript历史 2.2 创建并执行函数 2.2.1 第一个函数 2.2.2 严格模式 2.2.3 return语句是可选的 2.2.4 多语句函数 2.2.5 函数参数 2.2.6 ES5函数在ES6及更高版本中是有效的 2.3 设置项目 2.3.1 初始设置 2.3.2 用第一个函数式方法处理循环问题 2.3.3 export要点 2.3.4 import要点 2.3.5 使用babel-node运行代码 2.3.6 在npm中创建脚本 2.3.7 从git上运行源代码 2.4 小结 第3章 高阶函数 3.1 理解数据 3.1.1 理解JavaScript数据类型 3.1.2 存储函数 3.1.3 传递函数 3.1.4 返回函数 3.2 抽象和高阶函数 3.2.1 抽象的定义 3.2.2 通过高阶函数实现抽象 3.3 实用的高阶函数 3.3.1 every函数 3.3.2 some函数 3.3.3 sort函数 3.4 小结 第4章 闭包与高阶函数 4.1 理解闭包 4.1.1 什么是闭包 4.1.2 记住闭包生成的位置 4.1.3 回顾sortBy函数 4.2 实用的高阶函数(续) 4.2.1 tap函数 4.2.2 unary函数 4.2.3 once函数 4.2.4 memoized函数 4.2.5 assign函数 4.3 小结 第5章 数组的函数式编程 5.1 数组的函数式方法 5.1.1 map 5.1.2 filter 5.2 连接操作 5.3 reduce函数 5.4 zip数组 5.5 小结 第6章 柯里化与偏应用 6.1 一些术语 6.1.1 一元函数 6.1.2 二元函数 6.1.3 变参函数 6.2 柯里化 6.2.1 柯里化用例 6.2.2 日志函数:应用柯里化 6.2.3 回顾柯里化 6.2.4 回顾日志函数 6.3 柯里化实战 6.3.1 在数组内容中查找数字 6.3.2 求数组的平方 6.4 数据流 6.4.1 偏应用 6.4.2 实现偏函数 6.4.3 柯里化与偏应用技术 6.5 小结 第7章 组合与管道 7.1 组合的概念 7.2 函数式组合 7.2.1 回顾map与filter 7.2.2 compose函数 7.3 应用compose函数 7.3.1 引入curry与partial 7.3.2 组合多个函数 7.4 管道/序列 7.5 组合的优势 7.5.1 组合满足结合律 7.5.2 管道操作符 7.5.3 使用tap函数调试 7.6 小结 第8章 函子 8.1 什么是函子 8.1.1 函子是容器 8.1.2 实现map方法 8.2 MayBe函子 8.2.1 实现MayBe函子 8.2.2 简单用例 8.2.3 真实用例 8.3 Either函子 8.3.1 实现Either函子 8.3.2 Reddit例子的Either版本 8.4 Pointed函子 8.5 小结 第9章 深入理解Monad 9.1 根据搜索词条获取Reddit评论 9.2 问题描述 9.2.1 实现第一步 9.2.2 合并Reddit调用 9.2.3 多个map的问题 9.3 通过join解决问题 9.3.1 实现join 9.3.2 实现chain 9.3.3 什么是Monad 9.4 小结 第10章 使用Generator暂停、恢复和异步 10.1 异步代码及其问题 10.2 Generator 10.2.1 创建Generator 10.2.2 Generator的注意事项 10.2.3 yield关键字 10.2.4 Generator的done属性 10.2.5 向Generator传递数据 10.3 使用Generator处理异步调用 10.3.1 一个简单的案例 10.3.2 一个真实的案例 10.4 ECMAScript 2017中的异步函数 10.4.1 Promise 10.4.2 await 10.4.3 async 10.4.4 链式回调 10.4.5 异步调用中的错误处理 10.4.6 异步函数转化为Generator 10.5 小结 第11章 构建React-Like库 11.1 不可变性 11.2 构建简单的Redux库 11.3 构建一个类似于HyperApp的框架 11.3.1 虚拟DOM 11.3.2 JSX 11.3.3 JS Fiddle 11.3.4 createActions 11.3.5 render 11.3.6 patch 11.3.7 update 11.3.8 merge 11.3.9 remove 11.4 小结 第12章 测试与总结 12.1 介绍 12.2 测试的类型 12.3 BDD和TDD 12.4 JavaScript测试框架 12.4.1 使用Mocha进行测试 12.4.2 使用Sinon进行模拟 12.4.3 使用Jasmine进行测试 12.5 代码覆盖率 12.6 linting 12.7 单元测试库代码 12.8 最后的想法 12.9 小结 |