计算机
类型
8.2
豆瓣评分
可以朗读
语音朗读
213千字
字数
2018-05-01
发行日期
展开全部
主编推荐语
函数式JavaScript核心概念与实际应用
内容简介
本书共三部分内容。第一部分“函数式思想”是为第二部分的学习作铺垫的,这一部分引入了对函数式JavaScript的描述,从一些核心的函数式概念入手,介绍了纯函数、副作用以及声明式编程等函数式编程的主要支柱;第二部分“函数式基础”重点介绍函数式编程的核心技术,如函数链、柯里化、组合、Monad等;第三部分“函数式技能提升”则是介绍使用函数式编程解决现实问题的方法。
目录
- 版权信息
- 版权声明
- 内容提要
- 序
- 前言
- 资源与支持
- 致谢
- 第一部分 函数式思想
- 第1章 走近函数式
- 1.1 函数式编程有用吗?
- 1.2 什么是函数式编程?
- 1.2.1 函数式编程是声明式编程
- 1.2.2 副作用带来的问题和纯函数
- 1.2.3 引用透明和可置换性
- 1.2.4 存储不可变数据
- 1.3 函数式编程的优点
- 1.3.1 鼓励复杂任务的分解
- 1.3.2 使用流式链来处理数据
- 1.3.3 复杂异步应用中的响应
- 1.4 总结
- 第2章 高阶JavaScript
- 2.1 为什么要使用JavaScript?
- 2.2 函数式与面向对象的程序设计
- 2.2.1 管理JavaScript对象的状态
- 2.2.2 将对象视为数值
- 2.2.3 深冻结可变部分
- 2.2.4 使用Lenses定位并修改对象图
- 2.3 函数
- 2.3.1 一等函数
- 2.3.2 高阶函数
- 2.3.3 函数调用的类型
- 2.3.4 函数方法
- 2.4 闭包和作用域
- 2.4.1 全局作用域
- 2.4.2 函数作用域
- 2.4.3 伪块作用域
- 2.4.4 闭包的实际应用
- 2.5 总结
- 第二部分 函数式基础
- 第3章 轻数据结构,重操作
- 3.1 理解程序的控制流
- 3.2 链接方法
- 3.3 函数链
- 3.3.1 了解lambda表达式
- 3.3.2 用_.map做数据变换
- 3.3.3 用_.reduce 收集结果
- 3.3.4 用_.filter 删除不需要的元素
- 3.4 代码推理
- 3.4.1 声明式惰性计算函数链
- 3.4.2 类SQL的数据:函数即数据
- 3.5 学会递归地思考
- 3.5.1 什么是递归?
- 3.5.2 学会递归地思考
- 3.5.3 递归定义的数据结构
- 3.6 总结
- 第4章 模块化且可重用的代码
- 4.1 方法链与函数管道的比较
- 4.1.1 方法链接
- 4.1.2 函数的管道化
- 4.2 管道函数的兼容条件
- 4.2.1 函数的类型兼容条件
- 4.2.2 函数与元数:元组的应用
- 4.3 柯里化的函数求值
- 4.3.1 仿真函数工厂
- 4.3.2 创建可重用的函数模板
- 4.4 部分应用和函数绑定
- 4.4.1 核心语言扩展
- 4.4.2 延迟函数绑定
- 4.5 组合函数管道
- 4.5.1 HTML部件的组合
- 4.5.2 函数组合:描述与求值分离
- 4.5.3 函数式库的组合
- 4.5.4 应对纯的代码和不纯的代码
- 4.5.5 point-free编程
- 4.6 使用函数组合子来管理程序的控制流
- 4.6.1 identity(I-combinator)
- 4.6.2 tap(K-组合子)
- 4.6.3 alt(OR-组合子)
- 4.6.4 seq(S-组合子)
- 4.6.5 fork(join)组合子
- 4.7 总结
- 第5章 针对复杂应用的设计模式
- 5.1 命令式错误处理的不足
- 5.1.1 用try-catch处理错误
- 5.1.2 函数式程序不应抛出异常
- 5.1.3 空值(null)检查问题
- 5.2 一种更好的解决方案——Functor
- 5.2.1 包裹不安全的值
- 5.2.2 Functor定义
- 5.3 使用Monad函数式地处理错误
- 5.3.1 Monad:从控制流到数据流
- 5.3.2 使用Maybe Monad和Either Monad来处理异常
- 5.3.3 使用IO Monad与外部资源交互
- 5.4 Monadic链式调用及组合
- 5.5 总结
- 第三部分 函数式技能提升
- 第6章 坚不可摧的代码
- 6.1 函数式编程对单元测试的影响
- 6.2 测试命令式代码的困难
- 6.2.1 难以识别和分解任务
- 6.2.2 对共享资源的依赖会导致结果不一致
- 6.2.3 按预定义顺序执行
- 6.3 测试函数式代码
- 6.3.1 把函数当作黑盒子
- 6.3.2 专注于业务逻辑,而不是控制流
- 6.3.3 使用Monadic式从不纯的代码中分离出纯函数
- 6.3.4 mock外部依赖
- 6.4 通过属性测试制定规格说明
- 6.5 通过代码覆盖率衡量有效性
- 6.5.1 衡量函数式代码测试的有效性
- 6.5.2 衡量函数式代码的复杂性
- 6.6 总结
- 第7章 函数式优化
- 7.1 函数执行机制
- 7.1.1 柯里化与函数上下文堆栈
- 7.1.2 递归的弱点
- 7.2 使用惰性求值推迟执行
- 7.2.1 使用函数式组合子避免重复计算
- 7.2.2 利用shortcut fusion
- 7.3 实现需要时调用的策略
- 7.3.1 理解记忆化
- 7.3.2 记忆化计算密集型函数
- 7.3.3 有效利用柯里化与记忆化
- 7.3.4 通过分解来实现更大程度的记忆化
- 7.3.5 记忆化递归调用
- 7.4 递归和尾递归优化
- 将非尾递归转换成尾递归
- 7.5 总结
- 第8章 管理异步事件以及数据
- 8.1 异步代码的挑战
- 8.1.1 在函数之间创建时间依赖关系
- 8.1.2 陷入回调金字塔
- 8.1.3 使用持续传递式样
- 8.2 一等公民Promise
- 8.2.1 链接将来的方法
- 8.2.2 组合同步和异步行为
- 8.3 生成惰性数据
- 8.3.1 生成器与递归
- 8.3.2 迭代器协议
- 8.4 使用RxJS进行函数式和响应式编程
- 8.4.1 数据作为Observable序列
- 8.4.2 函数式编程与响应式编程
- 8.4.3 RxJS和Promise
- 8.5 总结
- 附录 本书中使用的JavaScript库
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。