Scala 程序设计 第2版 PDF 文档

发布于 2024-04-07 13:57:58 字数 7446 浏览 22 评论 0

本书通过大量的代码示例,全面介绍 Scala 这门针对 JVM 的编程语言,向读者展示了如何高效地利用 Scala 语言及其生态系统,同时解释了为何 Scala 是开发高扩展性、以数据为中心的应用程序的理想语言。

本书既适合 Scala 初学者入门,也适合经验丰富的 Scala 开发者参考。

作为一名程序员,我的职业生涯中一直贯穿着这样的主题:寻求更好的抽象和更好的工具来编写更好的软件。经过了这些年,我认为可组合性(composability)是一项比其他特征更重要的特征。如果我们编写的代码具有很好的可组合性,这通常意味着这些代码同样具备软件工程师所看重的其他特征,如正交性(orthogonality)、松耦合性以及高聚合性(high cohesion)。这些都是互通的。

前言
第 1 章 零到六十:Scala 简介
1.1 为什么选择 Scala
1.1.1 富有魅力的 Scala
1.1.2 关于 Java 8
1.2 安装 Scala
1.2.1 使用 SBT
1.2.2 执行 Scala 命令行工具
1.2.3 在 IDE 中运行 Scala REPL
1.3 使用 Scala
1.4 并发
1.5 本章回顾与下一章提要
第 2 章 更简洁,更强大
2.1 分号
2.2 变量声明
2.3 Range
2.4 偏函数
2.5 方法声明
2.5.1 方法默认值和命名参数列表
2.5.2 方法具有多个参数列表
2.5.3 Future 简介
2.5.4 嵌套方法的定义与递归
2.6 推断类型信息
2.7 保留字
2.8 字面量
2.8.1 整数字面量
2.8.2 浮点数字面量
2.8.3 布尔型字面量
2.8.4 字符字面量
2.8.5 字符串字面量
2.8.6 符号字面量
2.8.7 函数字面量
2.8.8 元组字面量
2.9 Option、Some 和 None:避免使用 null
2.10 封闭类的继承
2.11 用文件和名空间组织代码
2.12 导入类型及其成员
2.12.1 导入是相对的
2.12.2 包对象
2.13 抽象类型与参数化类型
2.14 本章回顾与下一章提要
第 3 章 要点详解
3.1 操作符重载?
3.2 无参数方法
3.3 优先级规则
3.4 领域特定语言
3.5 Scala 中的 if 语句
3.6 Scala 中的 for 推导式
3.6.1 for 循环
3.6.2 生成器表达式
3.6.3 保护式:筛选元素
3.6.4 Yielding
3.6.5 扩展作用域与值定义
3.7 其他循环结构
3.7.1 Scala 的 while 循环
3.7.2 Scala 中的 do-while 循环
3.8 条件操作符
3.9 使用 try、catch 和 final 子句
3.10 名字调用和值调用
3.11 惰性赋值
3.12 枚举
3.13 可插入字符串
3.14 Trait:Scala 语言的接口和“混入”
3.15 本章回顾与下一章提要
第 4 章 模式匹配
4.1 简单匹配
4.2 match 中的值、变量和类型
4.3 序列的匹配
4.4 元组的匹配
4.5 case 中的 guard 语句
4.6 case 类的匹配
4.6.1 unapply 方法
4.6.2 unapplySeq 方法
4.7 可变参数列表的匹配
4.8 正则表达式的匹配
4.9 再谈 case 语句的变量绑定
4.10 再谈类型匹配
4.11 封闭继承层级与全覆盖匹配
4.12 模式匹配的其他用法
4.13 总结关于模式匹配的评价
4.14 本章回顾与下一章提要
第 5 章 隐式详解
5.1 隐式参数
5.2 隐式参数适用的场景
5.2.1 执行上下文
5.2.2 功能控制
5.2.3 限定可用实例
应用 Scala API
5.2.4 隐式证据
5.2.5 绕开类型擦除带来的限制
5.2.6 改善报错信息
5.2.7 虚类型
5.2.8 隐式参数遵循的规则
5.3 隐式转换
5.3.1 构建独有的字符串插入器
5.3.2 表达式问题
5.4 类型类模式
5.5 隐式所导致的技术问题
5.6 隐式解析规则
5.7 Scala 内置的各种隐式
5.8 合理使用隐式
5.9 本章回顾与下一章提要
第 6 章 Scala 函数式编程
6.1 什么是函数式编程
6.1.1 数学中的函数
6.1.2 不可变变量
6.2 Scala 中的函数式编程
6.2.1 匿名函数、Lambda 与闭包
6.2.2 内部与外部的纯粹性
6.3 递归
6.4 尾部调用和尾部调用优化
6.5 偏应用函数与偏函数
6.6 Curry 化与函数的其他转换
6.7 函数式编程的数据结构
6.7.1 序列
6.7.2 映射表
6.7.3 集合
6.8 遍历、映射、过滤、折叠与归约
6.8.1 遍历
6.8.2 映射
6.8.3 扁平映射
6.8.4 过滤
6.8.5 折叠与归约
6.9 向左遍历与向右遍历
6.10 组合器:软件最佳组件抽象
6.11 关于复制
6.12 本章回顾与下一章提要
第 7 章 深入学习 for 推导式
7.1 内容回顾:for 推导式组成元素
7.2 for 推导式:内部机制
7.3 for 推导式的转化规则
7.4 Option 以及其他的一些容器类型
7.4.1 Option 容器
7.4.2 Either:Option 类型的逻辑扩展
7.4.3 Try 类型
7.4.4 Scalaz 提供的 Validation 类
7.5 本章回顾与下一章提要
第 8 章 Scala 面向对象编程
8.1 类与对象初步
8.2 引用与值类型
8.3 价值类
8.4 父类
8.5 Scala 的构造器
8.6 类的字段
8.6.1 统一访问原则
8.6.2 一元方法
8.7 验证输入
8.8 调用父类构造器(与良好的面向对象设计)
8.9 嵌套类型
8.10 本章回顾与下一章提要
第 9 章 特征
9.1 Java 8 中的接口
9.2 混入 trait
9.3 可堆叠的特征
9.4 构造 trait
9.5 选择类还是 trait
9.6 本章回顾与下一章提要
第 10 章 Scala 对象系统(I)
10.1 参数化类型:继承转化
10.1.1 Hood 下的函数
10.1.2 可变类型的变异
10.1.3 Scala 和 Java 中的变异
10.2 Scala 的类型层次结构
10.3 闲话 Nothing(以及 Null)
10.4 Product、case 类和元组
10.5 Predef 对象
10.5.1 隐式转换
10.5.2 类型定义
10.5.3 条件检查方法
10.5.4 输入输出方法
10.5.5 杂项方法
10.6 对象的相等
10.6.1 equals 方法
10.6.2 ==和!=方法
10.6.3 eq 和 ne 方法
10.6.4 数组相等和 sameElements 方法
10.7 本章回顾与下一章提要
第 11 章 Scala 对象系统(II)
11.1 覆写类成员和 trait 成员
11.2 尝试覆写 final 声明
11.3 覆写抽象方法和具体方法
11.4 覆写抽象字段和具体字段
11.5 覆写抽象类型
11.6 无须区分访问方法和字段:统一访问原则
11.7 对象层次结构的线性化算法
11.8 本章回顾与下一章提要
第 12 章 Scala 集合库
12.1 通用、可变、不可变、并发以及并行集合
12.1.1 scala.collection 包
12.1.2 collection.concurrent 包
12.1.3 collection.convert 包
12.1.4 collection.generic 包
12.1.5 collection.immutable 包
12.1.6 scala.collection.mutable 包
12.1.7 scala.collection.parallel 包
12.2 选择集合
12.3 集合库的设计惯例
12.3.1 Builder
12.3.2 CanBuildFrom
12.3.3 Like 特征
12.4 值类型的特化
12.5 本章回顾与下一章提要
第 13 章 可见性规则
13.1 默认可见性:公有可见性
13.2 可见性关键字
13.3 Public 可见性
13.4 Protected 可见性
13.5 Private 可见性
13.6 作用域内私有和作用域内受保护可见性
13.7 对可见性的想法
13.8 本章回顾与下一章提要
第 14 章 Scala 类型系统(I)
14.1 参数化类型
14.1.1 变异标记
14.1.2 类型构造器
14.1.3 类型参数的名称
14.2 类型边界
14.2.1 类型边界上限
14.2.2 类型边界下限
14.3 上下文边界
14.4 视图边界
14.5 理解抽象类型
14.6 自类型标记
14.7 结构化类型
14.8 复合类型
14.9 存在类型
14.10 本章回顾与下一章提要
第 15 章 Scala 类型系统(II)
15.1 路径相关类型
15.1.1 C.this
15.1.2 C.super
15.1.3 path.x
15.2 依赖方法类型
15.3 类型投影
15.4 值的类型
15.4.1 元组类型
15.4.2 函数类型
15.4.3 中缀类型
15.5 Higher-Kinded 类型
15.6 类型 Lambda
15.7 自递归类型:F-Bounded 多态
15.8 本章回顾与下一章提要
第 16 章 高级函数式编程
16.1 代数数据类型
16.1.1 加法类型与乘法类型
16.1.2 代数数据类型的属性
16.1.3 代数数据类型的最后思考
16.2 范畴理论
16.2.1 关于范畴
16.2.2 Functor 范畴
16.2.3 Monad 范畴
16.2.4 Monad 的重要性
16.3 本章回顾与下一章提要
第 17 章 并发工具
17.1 scala.sys.process 包
17.2 Future 类型
17.3 利用 Actor 模型构造稳固且可扩展的并发应用
17.4 Akka:为 Scala 设计的 Actor 系统
17.5 Pickling 和 Spores
17.6 反应式编程
17.7 本章回顾与下一章提要
第 18 章 Scala 与大数据
18.1 大数据简史
18.2 用 Scala 改善 MapReduce
18.3 超越 MapReduce
18.4 数学范畴
18.5 Scala 数据工具列表
18.6 本章回顾与下一章提要
第 19 章 Scala 动态调用
19.1 一个较为激进的示例:Ruby on Rails 框架中的 ActiveRecord 库
19.2 使用动态特征实现 Scala 中的动态调用
19.3 关于 DSL 的一些思考
19.4 本章回顾与下一章提要
第 20 章 Scala 的领域特定语言
20.1 DSL 实例:Scala 中 XML 和 JSON DSL
20.2 内部 DSL
20.3 包含解析组合子的外部 DSL
20.3.1 关于解析组合子
20.3.2 计算工资单的外部 DSL
20.4 内部 DSL 与外部 DSL:最后的思考
20.5 本章回顾与下一章提要
第 21 章 Scala 工具和库
21.1 命令行工具
21.1.1 命令行工具:scalac
21.1.2 Scala 命令行工具
21.1.3 scalap 和 javap 命令行工具
21.1.4 scaladoc 命令行工具
21.1.5 fsc 命令行工具
21.2 构建工具
21.2.1 SBT:Scala 标准构建工具
21.2.2 其他构建工具
21.3 与 IDE 或文本编辑器集成
21.4 在 Scala 中应用测试驱动开发
21.5 第三方库
21.6 本章回顾与下一章提要
第 22 章 与 Java 的互操作
22.1 在 Scala 代码中使用 Java 名称
22.2 Java 泛型与 Scala 泛型
22.3 JavaBean 的性质
22.4 AnyVal 类型与 Java 原生类型
22.5 Java 代码中的 Scala 名称
22.6 本章回顾与下一章提要
第 23 章 应用程序设计
23.1 回顾之前的内容
23.2 注解
23.3 Trait 即模块
23.4 设计模式
23.4.1 构造型模式
23.4.2 结构型模式
23.4.3 行为型模式
23.5 契约式设计带来更好的设计
23.6 帕特农神庙架构
23.7 本章回顾与下一章提要
第 24 章 元编程:宏与反射
24.1 用于理解类型的工具
24.2 运行时反射
24.2.1 类型反射
24.2.2 ClassTag、TypeTag 与 Manifest
24.3 Scala 的高级运行时反射 API
24.4 宏
24.4.1 宏的示例:强制不变性
24.4.2 关于宏的最后思考
24.5 本章回顾与下一章提要
附录 A 参考文献

下载地址:https://www.wenjiangs.com/wp-content/uploads/2024/02/SJqi6VZhOEp2nCS8.zip

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

文章
评论
84962 人气
更多

推荐作者

hn8888

文章 0 评论 0

liai0114

文章 0 评论 0

以酷

文章 0 评论 0

阿楠

文章 0 评论 0

郝学勇

文章 0 评论 0

烟燃烟灭

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文