展开全部

主编推荐语

函数式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库
展开全部

评分及书评

评分不足
2个评分
  • 用户头像
    给这本书评了
    5.0
    JS函数式编程很不错的书

    函数式编程首先是一种重要的思维方式:面相对象作为组件单元,函数式以函数作为基本单元,两者都是通过先拆分再组合的方式完成系统功能。函数式在有些方面更优秀,比如更灵活,更富有变现力。函数式值得多多探索实践。在 js 中,函数式多对应命令式。函数式的好处可太多了:易复用、易推理、易测试等。

      转发
      评论

    出版方

    人民邮电出版社

    人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。