《JavaScript函数式编程思想》

自序
逐渐Web技术的发展使得JavaScript逐渐成为应用面最为广的一种通用程序设计语言。目前JavaScript已被公认为在Web前端开发中占据绝对主导地位的语言,并且凭借其强大的表现力强且灵活的特点以及开源性质突出的优势,在过去几十年里取得了长足的进步。然而,在过去的一段时间内随着ECMAScript标准迅速发展起来的同时JavaScript也面临着来自其他技术的竞争压力。尽管如此它依然保持着向各个领域渗透的速度之快而且势头依然强劲。随着云计算时代的到来基于JavaScript构建的应用正在快速崛起并开始覆盖更多的行业领域同时也在不断挑战传统强大类别的技术如数据库或操作系统这些曾经被认为是无法被替代的传统强类型语言也正在逐步向弱类型方向转型以适应快速变化的技术环境需求
传统的JavaScript开发主要基于命令式与面向对象的技术框架,并少量融入了函数式的理念。该书旨在系统阐述这些概念及其应用方法后,默认这种技术能显著提升代码的表现力、清晰度以及易维护性。书中期望能帮助更多JavaScript开发者理解并欣赏这一简洁而强大的编程风格
全书共计分为9个章节。前两章主要探讨了与JavaScript函数式编程相关的技术体系及其核心理论体系——名称系统与类型系统;第三章则较为简洁地阐述了lambda演算这一函数式编程理论基础及其在JavaScript中对普通程序设计中的作用;第四至第五章深入解析了一阶可变性原则下的核心技术和关键技术点——一等值的概念、部分应用以及复合运算机制;第六章重点分析了无副作用特征及其在纯函数设计中的重要性,并探讨了不可变数据结构的基本概念;第七章系统地阐述了递归计算模式及其在程序设计中的应用价值;第八章则深入探讨了列表操作领域的相关技术与实现方法;第九章全面比较并分析了面向对象程序设计范式与 JavaScript 的 函数式 编程范式的异同点及其适用场景
野莽之辈若前出丑态,恐怕会引以为戒;钝者虽有数计,尚有几分可借鉴之处。此书虽有瑕疵,恳请读者不吝赐教
目录
内容提要
前言
第1章 名称
1.1 名称绑定
1.1.1 常量和变量
1.2 作用域
1.2.1 包块作用域与就近声明
1.2.2 静态作用域和动态作用域
1.2.3 前向引用和提升
1.3 闭包
1.3.1 包块作用域与闭包
1.4 小结
第2章 类型系统
2.1 类型是什么
2.2 常用的数据类型
2.2.1 整数
2.2.2 浮点数
2.2.3 布尔值
2.2.4 字符
2.2.5 元组、结构体、类
2.2.6 函数
2.2.7 数组、字符串、队列、堆栈、列表
2.2.8 结构体、映射
2.2.9 深入复合类型
2.3 强类型与弱类型
2.4 名义类型和结构类型
2.5 静态类型与动态类型
2.5.1 静态类型
2.5.2 动态类型
2.6 多态性
2.6.1 子类型多态性
2.6.2 参数多态性
2.7 JavaScript的类型系统
2.7.1 undefined和null
2.7.2 弱类型
2.7.3 变成强类型
2.8 鸭子类型和多态性
2.9 小结
第3章 Lambda演算和函数
3.1 命令式编程中函数的作用
3.1.1 抽象级别
3.2 Lambda演算
3.2.1 定义
3.2.2 记法
3.2.3 化约
3.2.4 算数
3.2.5 逻辑运算
3.2.6 函数式编程的特点
3.3 JavaScript中的函数
3.3.1 定义函数
3.3.2 调用函数
3.3.3 传递参数
3.3.4 模块
3.5 小结
第4章 函数是一等值
4.1 函数参数
4.1.1 数组的迭代方法
4.1.2 设计函数参数
4.2 函数返回值
4.2.1 判断数据类型
4.2.2 日志
4.2.3 读取对象属性
4.3 高阶函数
4.3.1 组合谓词函数
4.3.2 改变函数参数数目
4.3.3 检查参数类型
4.3.4 记忆化
4.4 小结
第5章 部分应用和复合
5.1 部分应用
5.2 柯里化
5.2.1 增强的柯里化
5.2.2 从右向左柯里化
5.2.3 进一步增强的柯里化
5.2.4 柯里化的性能成本
5.2.5 应用柯里化的方式
5.2.6 参数的顺序
5.2.7 柯里化与高阶函数
5.3 复合
5.3.1 管道和数据流
5.3.2 函数类型与柯里化
5.4 一切都是函数
5.4.1 操作符的函数化
5.4.2 方法的函数化
5.4.3 控制流语句的函数化
5.5 性能和可读性
5.6 小结
第6章 副作用和不变性
6.1 副作用
6.2 纯函数
6.2.1 外部变量
6.2.2 实现
6.2.3 函数内部的副作用
6.2.4 闭包
6.3 不变性
6.3.1 哲学上的不变性与身份
6.3.2 简单类型和复合类型
6.3.3 值类型和引用类型
6.3.4 可变类型和不可变类型
6.3.5 可变数据类型的坏处
6.3.6 克隆和冻结
6.3.7 不可变的数据结构
6.3.8 不可变的映射和数组
6.3.9 不可变类型的其他好处
6.4 小结
第7章 递归
7.1 调用自身
7.1.1 递归的思路
7.1.2 带累积参数的递归函数
7.2 递归的数据结构
7.2.1 构建列表
7.2.2 树
7.3 递归与迭代
7.3.1 名称
7.3.2 理念和对比
7.3.3 迭代协议
7.3.4 递归协议
7.3.5 搜索树
7.4 尾部递归
7.4.1 调用堆栈
7.4.2 尾部调用优化
7.4.3 怎样算是尾部调用
7.4.4 尾部递归
7.5 递归的效率
7.6 小结
第8章 列表
8.1 处理列表
8.1.1 函数的三种写法
8.1.2 处理列表的高阶函数
8.2 函数式编程的列表接口
8.2.1 没有副作用的方法
8.2.2 有副作用的方法
8.2.3 列表接口中的其他函数
8.3 小结
第9章 从面向对象到函数式编程
9.1 面向对象编程的特点
9.1.1 封装性
9.1.2 继承性
9.1.3 多态性
9.2 JavaScript面向对象编程
9.2.1 创建和修改单个对象
9.2.2 克隆和复制属性
9.2.3 原型
9.2.4 建构函数
9.2.5 建构函数和类型继承
9.2.6 原型和类型继承
9.2.7 Proxy和对象继承
9.2.8 Mixin
9.2.9 工厂函数
9.3 函数式编程的视角
9.3.1 不可变的对象
9.3.2 评判面向对象编程
9.4 方法链和复合函数
9.4.1 方法链
9.4.2 延迟的方法链
9.4.3 复合函数
9.4.3 函数式的SQL
9.5 小结
更多内容
欢迎亲朋好友关注并阅读一本电子书哦!对JavaScript和函数式编程感兴趣的读者请多多指教!我们承诺为每位下单金额不少于50斤的顾客赠送作者个人签名照片一张!期待您的光临!
