科技>计算机>编程语言
Scala编程(第4版)

Scala编程(第4版)"

作者:高宇翔
ISBN:9787121402722
定价:¥209.0
字数:1097千字
页数:844
出版时间:2020-12
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

本书由直接参与 Scala 开发的一线人员编写,因而对原理的解读和对应用的把握更加值得信赖。本书面向具有一定编程经验的开发者,目标是让读者能够全面了解和掌握 Scala 编程语言的核心特性,并能够深入理解 Scala 这门语言在设计取舍背后的动因。即便是不直接使用Scala 的读者或非一线编程从业者,也能从本书中学到大量关于函数式和面向对象的编程概念和技巧。

前言

译者序 三年过去了。Scala 变了吗?在我看来,Scala 还是那个让人着迷,同时又超级务实的小众语言。但这并不重要,重要的是你找到了它,而它也找到了你。如果你刚接触 Scala,请允许我投来羡慕的眼光,因为从来没有像今天这样, 有这么多优质的学习资源可供选择,而 Scala 也一直在稳定地向业界输出成熟的解决方案和人才。 我还清晰地记得十年前刚上手 Scala,以及三年前引进《Scala 编程》第3版时的内心活动。我的职业生涯,从我接触 Scala 那一天起,就已注定不同。不怕各位看官笑话,Scala 是我现在公司入职的敲门砖,让我从企业开发顺利 过渡到互联网行业。Scala 也伴随我和团队的成长,贡献了大量经住了互联网级别压力考验的代码,其中一些从 6 年前上线到现在,几乎没有做过重大修改,还是最初的设计和实现,跑赢了很多昙花一现的技术栈。 说回《Scala 编程》,跟第 3 版相比,第 4 版增补了 Scala 2.13 的内容,Scala 2.13 中最主要的改动,是为了给 Scala 3 打基础而几乎重写的集合框架。这本书的分量,除 Martin Odersky 的亲自背书和显而易见的篇幅之外,我 认为最值得一提的,是它不仅全面覆盖了 Scala 几乎所有的语言特性,还从语言开发者的视角,向我们介绍了这些语言特性和设计取舍背后的原因,以及要解决的问题。这是《Scala 编程》跟其他林林总总的 Scala 图书最大的区别。从工具和工具书的角度来看,你也许会觉得 :编程语言就是拿来干活儿的,一本编程语言的入门书,当然就是要把怎么用讲明白,让我高效地完成手中的工作,其他都是次要的。这里,我想给读者朋友们分享一个我自己的心得 :语言除了表达(让计算机和其他人类明白),更是思维的载体。学习一门编程语言,局部功利的因素当然有,但更多的,是通过这门语言,拓宽你的知识边界。语言是手段,不是目的。所以,不论你是否从事 Scala 编程工作,希望这本书,都能够带给你不一样的世界和认知。 感谢 Martin Odersky 和他的团队,为我们带来这样一门独特而优美的编程语言 ;感谢电子工业出版社、张春雨编辑,在第 1 版和第 3 版之后,继续引进本书的第 4 版 ;感谢编辑团队和其他幕后工作者的辛勤付出 ;感谢家人无条件的支持和鼓励,我爱你们,你们是我心中的灯塔。 在本书的翻译过程中,译者虽已尽力忠实呈现原著的本意,但毕竟能力有限,问题和疏漏恐难以避免,恳请各位读者批评指正,联系地址 : gaoyuxiang.scala@gmail.com 。 ——高宇翔 2020 年于上海 序 那是 2004 年的一天,我才刚开始编程的职业生涯没多久,当我坐下来,选中了这门在当时还没多少人知道的语言时,我根本无从想象,是怎样的探索和发现的旅程在等待着我。 最初,使用 Scala 编程给我的感受跟使用其他语言并没有特别的不同:试错、实验然后发现,误解然后受教。那时,我能获取的学习资料十分有限:没有教程,没有博客,没有能教我的熟手,当然,更没有像《Scala 编程》这样的书可以参考。我有的仅仅是一门语言,各种神奇的新特性,但没有人能完全肯定怎样用是合适的。赋能的同时,也让人无所适从! 我的 Java 程序员背景让我对 Scala 有所准备,但在日常开发中使用 Scala还是很不一样。我记得早期的一次印象深刻的 Scala 编程经历,当时我跟另一个伙伴一起用 Scala 做一个中等规模的项目。项目过程中我决定执行一次重构 操作——我总是能不断发现新的特性和模式,这已经成了常态——然后就是好几轮的编译。每一次编译器都会向我报告错误清单和每个错误的行号,而我每次都会找到对应的代码行,看看是哪里不对,更新代码修复问题(问题通常都 不会消失,而是换个地方出现)。不过每一步,编译器都能直接把我引到问题发生的地方。有时候,我会重复上述的步骤,好几天都没有一次成功的编译。不过当编译错误从 100 条逐步减少到 10 条,然后 1 条,然后 0 条——成功编译——这时我终于能够跑一跑这个经过大力重构的系统。然而,出人意料的是,它竟然能正常工作。作为一个之前只用过 Java、Perl、BASIC、PHP 和 JavaScript 的年轻程序员,我简直无法相信这是真的。 时间来到 2015 年,在我组织的首届 Scala World 大会上,Rúnar Bjarnason在开场主题演讲中提到“约束即解放,自由有束缚”。在这一点上,没有什么比 Scala 编译过程更有说服力 :当程序员知道 scalac 会执行一整套约束检查, 其目的是让我们免于经历运行时错误——最糟糕的一种错误——的痛苦时,会获得解放。这会让程序员在哪怕没有完整的测试套件时,也能充满信心去实验和探索,开启大刀阔斧的改造。 在过去的这些年,我不断地学习 Scala,直到今天还能发现新的可能性、细微差异和不同特性之间有趣的交集。我不知道还有什么其他语言能像 Scala这样经过多年还持续让人陶醉其中。 Scala 即将迎来一次巨变。Scala 的下一个主要版本,Scala 3,其更新幅度将不亚于我 15 年前从 Java 升级到 Scala。日常的 Scala 编程体验大部分还会继续保留,但新的语言特性将交叉融合,并深远地影响 Scala 的方方面面。在本书付印之时,离 Scala 3 被大面积采纳还有几年的时间,Scala 2 在可预见的未来仍是 Scala 事实上的标准版本。 本书所涵盖的 Scala 2 最新版本,2.13,在标准库中引入了全新的集合类库,吸取了大量来自实战的经验教训,以简化为目标做了重新设计,而上一次这种规模的重构要追溯到 Scala 2.8。新的集合将支持交叉编译到 Scala 2 和 Scala 3,使用新集合类库的代码将无疑为下一个十年打好基础。当所有人对下一个版本的 Scala 都充满期待时,不失为入手《Scala 编程》开始学习的良好契机! ——Jon Pretty 2019 年 9 月 12 日 波兰 克拉科夫 引言 本书是 Scala 编程语言的教程,由直接参与 Scala 开发的人来编写。我们的目标是让读者通过本书,能够了解和掌握成为高产的 Scala 程序员需要知道的一切。书中的示例均通过 Scala 2.13.1 编译。 谁读本书 本书主要的目标读者是希望学习如何用 Scala 编程的人。如果你想在你的下一个项目中使用 Scala,那么本书就是为你准备的。除此之外,本书对于那些想要学习新知识从而扩展自己眼界的程序员也同样有益。比方说,如果你是 Java 程序员,阅读本书,你将接触到来自函数式编程领域和高阶面向对象领域的许多概念。我们相信,通过学习 Scala,以及 Scala 背后的观念,你将成为一名更好的程序员。 我们假定你拥有常规的编程知识。尽管 Scala 作为用于入门的编程语言并没有什么不妥,但是这本书并不适用于(从零开始)学习编程。另一方面,阅读本书并不要求某项具体的编程语言的知识。我们当中大部分人都是在 Java 平台上使用 Scala 的,但本书并不假定你了解 Java 本身。不过,我们预期大部分读者都熟悉 Java,因此我们有时会拿 Scala 跟 Java 做对比,帮助这些读者理解它们之间的区别。 如何使用本书 由于本书的主旨是教学,因此我们推荐的阅读顺序是从前到后,依次阅读各章。我们尽可能每次只引入一个主题,同时只用已经介绍过的主题来解释这个新的主题。因此,如果跳过前面的章节,你也许会遇到某些并不十分理解的 概念。只要按顺序阅读,你会发现掌握 Scala 是循序渐进、顺理成章的。如果你看到某个不明白的词汇,记着查看词汇表和索引。许多读者都喜欢快速浏览特定的章节,这没有问题,词汇表和索引能帮助你随时找回阅读的坐标和方位。 当你读完本书以后,还可以继续将其当作语言参考。Scala 编程语言有一份正式的语言规范,但语言规范强调的是精确,而不是可读性。虽然本书不会覆盖 Scala 的每一个细节,它也足够全面,应该能够在你逐渐成为 Scala 编程 能手的过程中,承担起语言参考书的职责。 如何学习Scala 通读本书,可以学到很多关于 Scala 的知识。不过,如果你做一些额外的尝试,则可以学得更快,更彻底。 首先,可以利用好包含在本书中的代码示例。手动将这些示例录入,有助于在脑海中逐行过一遍代码。尤其是录入过程中尝试一些变化,会非常有趣,这也能让你确信自己真的理解了它们背后的工作原理。 其次,时常访问在线论坛。这样,你和其他 Scala 爱好者可以互相促进。网上有大量的邮件列表、讨论组、聊天室、Wiki 和 Scala 特定主题的订阅。花些时间,找到满足你需求的内容,你会在小问题上花更少的时间,有更多的精力投入到更深入、更重要的问题中。 最后,一旦你读得足够多,则可以自己启动一个编程项目。从头编写小程序,或者为某个更大的项目开发组件。仅仅阅读并不会让你走得更远。 内容概览 第 1 章, “一门可伸缩的语言”,主要介绍 Scala 的设计及背后的概念和历史。 第 2 章,“Scala 入门”,介绍了如何用 Scala 完成一些基础的编程任务,但并不深入讲解它们是如何工作的。本章的目的是让你可以开始键入 Scala 代码并执行。 第 3 章,“Scala 入门(续)”,展示了更多基本的编程任务,帮助你快速上手 Scala。学习完本章以后,你应该就能用 Scala 完成简单的脚本型任务了。 第 4 章,“类和对象”,开始深入介绍 Scala,描述其基本的面向对象的组成部分,并指导大家如何编译并运行 Scala 应用程序。 第 5 章,“基本类型和操作”,介绍了 Scala 基本类型、字面量和支持的操作,(操作符的)优先级和结合性,以及对应的富包装类。 第 6 章,“函数式对象”,以函数式(即不可变)的分数(rational)为例,更深入地讲解 Scala 面向对象的特性。 第 7 章,“内建的控制结构”,展示了如何使用 Scala 内建的控制结构 : if 、while 、 for 、 try 和 match 。 第 8 章,“函数和闭包”,给出了对函数的深入介绍,而函数是函数式编程语言最基本的组成部分。 第 9 章,“控制抽象”,展示了如何通过定义自己的控制抽象来对 Scala 基本的控制结构进行完善和补充。 第 10 章,“组合和继承”,更进一步探讨 Scala 对面向对象编程的支持。本章的主题不像第 4 章那么基础,但实践中经常会遇到。 第 11 章,“Scala 的继承关系”,解释了 Scala 的继承关系,并探讨了通用方法和底类型等概念。 第 12 章,“特质”,介绍了 Scala 的混入(mixin)组合机制。本章展示了特质的工作原理,描述了特质的常见用法,并解释了特质相对于更传统的多重继承有哪些改进。 第 13 章,“包和引入”,讨论了大规模编程实践中我们会遇到的问题,包括顶级包、import 语句,以及像 protected 和 private 那样的访问控制修饰符。 第 14 章,“断言和测试”,展示了 Scala 的断言机制,并介绍了用 Scala 编写测试的若干工具,特别是 ScalaTest。 第 15 章,“样例类和模式匹配”,介绍了这组孪生的结构,让你更好地编写规则的、开放式的数据结构。样例类和模式匹配在处理树形的递归数据时非常有用。 第 16 章,“使用列表”,详细地解释了列表这个在 Scala 程序中使用最普遍的数据结构。 第 17 章,“使用其他集合类”,展示了如何使用基本的 Scala 集合,如列表、数组、元组、集和映射。 第 18 章,“可变对象”,解释了可变对象,以及 Scala 用来表示它们的语法。本章以一个具体的离散事件模拟案例分析收尾,展示了实践中可变对象的适用场景。 第 19 章,“类型参数化”,用具体的示例解释了第 13 章介绍过的信息隐藏的技巧:为纯函数式队列设计的类。本章接下来对类型参数的型变进行了说明,介绍了类型参数化对于信息隐藏的作用。 第 20 章,“抽象成员”,描述了 Scala 支持的各种抽象成员,不仅是方法可以被声明为抽象的,字段和类型也可以。 第 21 章,“隐式转换和隐式参数”,介绍了两个能够帮助你从源码中省去那些枯燥细节的概念,让编译器来自动填充或提供。 第 22 章,“实现列表”,描述了 List 类的实现。理解 Scala 列表的工作原理非常重要, List 类的实现也展示了 Scala 若干特性的运用。 第 23 章,“重访 for 表达式”,展示了 Scala 如何将 for 表达式翻译成map 、 flatMap 、 filter 和 foreach 。 第 24 章,“深入集合类”,详细介绍了 Scala 集合类库。 第 25 章,“Scala 集合架构”,展示了集合类的构造,以及如何构建自制的集合。 第 26 章,“提取器”,展示了如何对任意的类进行模式匹配,而不是局限于使用样例类(做模式匹配)。 第 27 章,“注解”,展示了如何通过注解使用语言扩展。本章描述了若干标准的注解,并解释了如何构建自己的注解。 第 28 章,“使用 XML”,解释了如何用 Scala 处理 XML。本章展示了生成XML、解析 XML 和处理 XML 的常见用法。 第 29 章,“用对象实现模块化编程”,展示了如何使用 Scala 的对象构建模块化的系统。 第 30 章,“对象相等性”,指出了编写 equals 方法时需要考虑的若干问题和需要注意绕开的“坑”。 第 31 章,“结合 Scala 和 Java”,探讨了在同一个工程中组合 Scala 和 Java时会遇到的若干问题,并对如何解决这些问题给出了建议。 第 32 章,“Future 和并发编程”,展示了如何使用 Scala 的 Future 类。尽管完全可以在 Scala 中使用 Java 平台的并发编程原语和类库,Scala 的 Future可以帮助你避开传统的“线程和锁”的并发编程模型里常见的死锁(deadlock) 和争用状况(race condition)。 第 33 章,“组合子解析”,展示了如何用 Scala 的组合子(combinator)解析器(parser)类库构建解析器。 第 34 章,“GUI 编程”,快速地介绍了可大幅简化基于 Swing 的 GUI 编程的 Scala 类库。 第 35 章,“SCells 试算表”,通过展示一个完整的用 Scala 编写的试算表应用程序,将本书介绍的所有 Scala 特性组装串联起来。

目录

序 .........................................................................................................XXII 致谢 .....................................................................................................XXIV 引言 ....................................................................................................XXVII 第1章 一门可伸缩的语言 ..........................................................................1 1.1 一门按需伸缩的语言 ..................................................................... 2 1.2 是什么让Scala能屈能伸 ................................................................. 7 1.3 为什么要用Scala ...........................................................................11 1.4 Scala寻根 ..................................................................................... 17 1.5 结语 ............................................................................................. 19 第2章 Scala入门 ....................................................................................20 第1步 使用Scala解释器 ..................................................................... 21 第2步 定义变量 ................................................................................. 22 第3步 定义函数 ................................................................................. 24 第4步 编写Scala脚本 ......................................................................... 26 第5步 用while做循环;用if做判断 .................................................... 27 第6步 用foreach和for遍历 ................................................................. 30 结语 ...................................................................................................... 32 第3章 Scala入门(续) ..........................................................................33 第7步 用类型参数化数组 .................................................................. 33 第8步 使用列表 ................................................................................. 38 第9步 使用元组 ................................................................................. 42 第10步 使用集和映射 ........................................................................ 43 第11步   识别函数式编程风格 ............................................................. 48 第12步   从文件读取文本行 ................................................................. 51 结语 ...................................................................................................... 55 第4章 类和对象 ......................................................................................56 4.1 类、字段和方法 ........................................................................... 56 4.2 分号推断 ...................................................................................... 61 4.3 单例对象 ...................................................................................... 62 4.4 Scala应用程序 ............................................................................. 65 4.5 App特质 ....................................................................................... 68 4.6 结语 ............................................................................................. 68 第5章 基础类型和操作 ............................................................................69 5.1 一些基础类型 .............................................................................. 69 5.2 字面量 .......................................................................................... 70 5.3 字符串插值 .................................................................................. 77 5.4 操作符即方法 .............................................................................. 78 5.5 算术操作 ...................................................................................... 81 5.6 关系和逻辑操作 ........................................................................... 83 5.7 位运算操作 .................................................................................. 85 5.8 对象相等性 .................................................................................. 86 5.9 操作符优先级和结合性 ............................................................... 88 5.10 富包装类 .................................................................................... 91 5.11 结语............................................................................................ 91 第6章 函数式对象 ...................................................................................93 6.1 Rational类的规格定义 ................................................................. 93 6.2 构建Rational ................................................................................ 94 6.3 重新实现toString方法 .................................................................. 96 6.4 检查前置条件 .............................................................................. 97 6.5 添加字段 ...................................................................................... 98 6.6 自引用 .........................................................................................100 6.7 辅助构造方法 .............................................................................101 6.8 私有字段和方法 ..........................................................................102 6.9 定义操作符 .................................................................................104 6.10 Scala中的标识符 .......................................................................106 6.11 方法重载 ...................................................................................108 6.12 隐式转换 ...................................................................................111 6.13 注意事项 ...................................................................................112 6.14 结语 ..........................................................................................112 第7章 内建的控制结构 ..........................................................................114 7.1 if表达式 ......................................................................................115 7.2 while循环 ....................................................................................116 7.3 for表达式 ....................................................................................119 7.4 用try表达式实现异常处理 ..........................................................125 7.5 match表达式 ...............................................................................129 7.6 没有break和continue的日子 ........................................................131 7.7 变量作用域 .................................................................................134 7.8 对指令式代码进行重构 ..............................................................137 7.9 结语 ............................................................................................139 第8章 函数和闭包 .................................................................................140 8.1 方法 ............................................................................................140 8.2 局部函数 .....................................................................................142 8.3 一等函数 .....................................................................................144 8.4 函数字面量的简写形式 ..............................................................147 8.5 占位符语法 .................................................................................147 8.6 部分应用的函数 ..........................................................................149 8.7 闭包 ............................................................................................152 8.8 特殊的函数调用形式 ..................................................................156 8.9 尾递归 .........................................................................................159 8.10 结语 ..........................................................................................163 第9章 控制抽象 ....................................................................................164 9.1 减少代码重复 .............................................................................164 9.2 简化调用方代码 ..........................................................................169 9.3 柯里化 .........................................................................................170 9.4 编写新的控制结构 ......................................................................173 9.5 传名参数 .....................................................................................176 9.6 结语 ............................................................................................178 第10章 组合和继承 ...............................................................................179 10.1 一个二维的布局类库 ................................................................179 10.2 抽象类 .......................................................................................180 10.3 定义无参方法 ...........................................................................182 10.4 扩展类 .......................................................................................184 10.5 重写方法和字段 ........................................................................186 10.6 定义参数化字段 ........................................................................188 10.7 调用超类构造方法 ....................................................................189 10.8 使用override修饰符 ..................................................................190 10.9 多态和动态绑定 ........................................................................192 10.10 声明final成员 ..........................................................................195 10.11 使用组合和继承 ......................................................................196 10.12 实现above、beside和toString ..................................................198 10.13 定义工厂对象 ..........................................................................201 10.14 增高和增宽 .............................................................................204 10.15 放在一起 .................................................................................206 10.16 结语 ........................................................................................207 第11章 Scala的继承关系 ......................................................................208 11.1 Scala的类继承关系 ...................................................................208 11.2 基本类型的实现机制 ................................................................212 11.3 底类型(bottom types) ...........................................................215 11.4 定义自己的值类型 ....................................................................216 11.5 结语...........................................................................................219 第12章 特质 .........................................................................................220 12.1 特质如何工作 ...........................................................................220 12.2 瘦接口和富接口 ........................................................................224 12.3 示例:矩形对象 ........................................................................225 12.4 Ordered特质 ..............................................................................227 12.5 作为可叠加修改的特质 .............................................................229 12.6 为什么不用多重继承 ................................................................234 12.7 要特质还是不要特质 ................................................................238 12.8 结语 ..........................................................................................238 第13章 包和引入 ..................................................................................240 13.1 将代码放进包里 ........................................................................240 13.2 对相关代码的精简访问 .............................................................242 13.3 引入 ..........................................................................................246 13.4 隐式引入 ...................................................................................249 13.5 访问修饰符 ...............................................................................250 13.6 包对象 .......................................................................................256 13.7 结语 ..........................................................................................257 第14章 断言和测试 ...............................................................................258 14.1 断言 ..........................................................................................258 14.2 用Scala写测试 ...........................................................................260 14.3 翔实的失败报告 ........................................................................262 14.4 作为规格说明的测试 ................................................................263 14.5 基于性质的测试 ........................................................................267 14.6 组织和运行测试 ........................................................................268 14.7 结语 ..........................................................................................270 第15章 样例类和模式匹配 ....................................................................271 15.1 一个简单的例子 ........................................................................271 15.2 模式的种类 ...............................................................................276 15.3 模式守卫 ...................................................................................286 15.4 模式重叠 ...................................................................................287 15.5 密封类 .......................................................................................289 15.6 Option类型 ................................................................................291 15.7 到处都是模式 ...........................................................................293 15.8 一个复杂的例子 ........................................................................298 15.9 结语 ..........................................................................................306 第16章 使用列表 ..................................................................................307 16.1 List字面量 .................................................................................307 16.2 List类型 ....................................................................................308 16.3 构建列表 ...................................................................................309 16.4 列表的基本操作 ........................................................................309 16.5 列表模式 ...................................................................................310 16.6 List类的初阶方法 .....................................................................312 16.7 List类的高阶方法 .....................................................................324 16.8 List对象的方法 .........................................................................332 16.9 同时处理多个列表 ....................................................................335 16.10 理解Scala的类型推断算法 ......................................................336 16.11 结语 .........................................................................................339 第17章 使用其他集合类 ........................................................................341 17.1 序列 ..........................................................................................341 17.2 集和映射 ...................................................................................345 17.3 在可变和不可变集合类之间选择 ..............................................353 17.4 初始化集合 ...............................................................................356 17.5 元组 ..........................................................................................360 17.6 结语 ..........................................................................................362 第18章 可变对象 ..................................................................................363 18.1 什么样的对象是可变的 .............................................................363 18.2 可被重新赋值的变量和属性 .....................................................366 18.3 案例分析:离散事件模拟 .........................................................369 18.4 用于描述数字电路的语言 .........................................................370 18.5 Simulation API ..........................................................................373 18.6 电路模拟 ...................................................................................377 18.7 结语 ..........................................................................................385 第19章 类型参数化 ...............................................................................386 19.1 函数式队列 ...............................................................................386 19.2 信息隐藏 ...................................................................................390 19.3 型变注解 ...................................................................................393 19.4 检查型变注解 ...........................................................................398 19.5 下界 ..........................................................................................401 19.6 逆变 ..........................................................................................403 19.7 对象私有数据 ...........................................................................406 19.8 上界 ..........................................................................................408 19.9 结语 ..........................................................................................411 第20章 抽象成员 ..................................................................................412 20.1 抽象成员概览 ...........................................................................412 20.2 类型成员 ...................................................................................413 20.3 抽象的val ..................................................................................414 20.4 抽象的var ..................................................................................415 20.5 初始化抽象的val .......................................................................416 20.6 抽象类型 ...................................................................................424 20.7 路径依赖类型 ...........................................................................426 20.8 改良类型 ...................................................................................429 20.9 枚举 ..........................................................................................430 20.10 案例分析:货币 ......................................................................432 20.11 结语 .........................................................................................442 第21章 隐式转换和隐式参数 .................................................................443 21.1 隐式转换 ...................................................................................443 21.2 隐式规则 ...................................................................................446 21.3 隐式转换到一个预期的类型 .....................................................449 21.4 转换接收端 ...............................................................................451 21.5 隐式参数 ...................................................................................455 21.6 上下文界定 ...............................................................................461 21.7 当有多个转换可选时 ................................................................464 21.8 调试 ..........................................................................................466 21.9 结语 ..........................................................................................468 第22章 实现列表 ..................................................................................469 22.1 List类的原理 .............................................................................469 22.2 ListBuffer类 ..............................................................................475 22.3 List类的实践 .............................................................................477 22.4 外部可见的函数式 ....................................................................480 22.5 结语 ..........................................................................................481 第23章 重访for表达式...........................................................................482 23.1 for表达式 ..................................................................................484 23.2 N皇后问题 ................................................................................485 23.3 用for推导式进行查询 ...............................................................488 23.4 用for推导式进行翻译 ...............................................................490 23.5 反过来 .......................................................................................495 23.6 泛化for表达式 ...........................................................................496 23.7 结语 ..........................................................................................498 第24章 深入集合类 ...............................................................................499 24.1 可变和不可变集合 ....................................................................500 24.2 集合的一致性 ...........................................................................502 24.3 Iterable特质 ...............................................................................504 24.4 序列型特质Seq、IndexedSeq和LinearSeq ................................511 24.5 集 ..............................................................................................517 24.6 映射 ..........................................................................................521 24.7 具体的不可变集合类 ................................................................525 24.8 具体的可变集合类 ....................................................................534 24.9 数组 ..........................................................................................540 24.10 字符串 .....................................................................................545 24.11 性能特征 .................................................................................546 24.12 相等性 .....................................................................................548 24.13 视图 ........................................................................................549 24.14 迭代器 .....................................................................................554 24.15 从头创建集合 ..........................................................................561 24.16 Java和Scala集合互转 ..............................................................563 24.17 结语 ........................................................................................565 第25章 Scala集合架构 .........................................................................566 25.1 抽取公共操作 ...........................................................................566 25.2 集成新的集合 ...........................................................................575 25.3 结语 ..........................................................................................600 第26章 提取器 .....................................................................................601 26.1 示例:提取电子邮箱地址 .........................................................601 26.2 提取器 .......................................................................................603 26.3 提取0或1个变量的模式 ............................................................606 26.4 提取可变长度参数的模式 .........................................................608 26.5 提取器和序列模式 ....................................................................610 26.6 提取器和样例类的对比 .............................................................611 26.7 正则表达式 ...............................................................................613 26.8 结语 ..........................................................................................616 第27章 注解 .........................................................................................618 27.1 为什么要有注解 ........................................................................618 27.2 注解的语法 ...............................................................................619 27.3 标准注解 ...................................................................................621 27.4 结语 ..........................................................................................625 第28章 使用XML ..................................................................................626 28.1 半结构化数据 ...........................................................................626 28.2 XML概览 ..................................................................................627 28.3 XML字面量 ..............................................................................628 28.4 序列化 .......................................................................................630 28.5 拆解XML ..................................................................................632 28.6 反序列化 ...................................................................................634 28.7 加载和保存 ...............................................................................635 28.8 对XML做模式匹配 ...................................................................636 28.9 结语 ..........................................................................................640 第29章 用对象实现模块化编程 ..............................................................641 29.1 问题描述 ...................................................................................642 29.2 食谱应用程序 ...........................................................................643 29.3 抽象 ..........................................................................................646 29.4 将模块拆分成特质 ....................................................................650 29.5 运行时链接 ...............................................................................652 29.6 跟踪模块实例 ...........................................................................654 29.7 结语 ..........................................................................................655 第30章 对象相等性 ...............................................................................657 30.1 Scala中的相等性 .......................................................................657 30.2 编写相等性方法 ........................................................................658 30.3 为参数化类型定义相等性 .........................................................672 30.4 如何编写equals和hashCode方法 ...............................................676 30.5 结语 ..........................................................................................680 第31章 结合Scala和Java .....................................................................681 31.1 从Java使用Scala .......................................................................681 31.2 注解 ..........................................................................................684 31.3 通配类型 ...................................................................................690 31.4 同时编译Scala和Java ................................................................692 31.5 Java 8集成 .................................................................................693 31.6 结语 ..........................................................................................697 第32章 Future和并发编程 .....................................................................698 32.1 天堂里的烦恼 ...........................................................................699 32.2 异步执行和Try ..........................................................................700 32.3 使用Future ................................................................................702 32.4 测试Future ................................................................................717 32.5 结语 ..........................................................................................720 第33章 组合子解析 ...............................................................................721 33.1 示例:算术表达式 ....................................................................722 33.2 运行你的解析器 ........................................................................724 33.3 基本的正则表达式解析器 .........................................................725 33.4 另一个示例:JSON ..................................................................726 33.5 解析器输出 ...............................................................................729 33.6 实现组合子解析器 ....................................................................735 33.7 字符串字面量和正则表达式 .....................................................744 33.8 词法分析和解析 ........................................................................745 33.9 错误报告 ...................................................................................746 33.10 回溯和LL(1) ............................................................................748 33.11 结语 .........................................................................................749 第34章 GUI编程 ...................................................................................752 34.1 第一个Swing应用程序 ..............................................................752 34.2 面板和布局 ...............................................................................755 34.3 处理事件 ...................................................................................757 34.4 示例:摄氏/华氏转换器 ...........................................................760 34.5 结语 ..........................................................................................762 第35章 SCells试算表 ...........................................................................764 35.1 可视化框架 ...............................................................................764 35.2 将数据录入和显示分开 .............................................................767 35.3 公式 ..........................................................................................770 35.4 解析公式 ...................................................................................772 35.5 求值 ..........................................................................................777 35.6 操作类库 ...................................................................................780 35.7 变更通知 ...................................................................................783 35.8 结语 ..........................................................................................787 附录 Unix和Windows环境的Scala脚本 .................................................789 术语表 ...................................................................................................790 关于作者 ................................................................................................810

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个