新書推薦:
《
火枪与账簿:早期经济全球化时代的中国与东亚世界
》
售價:NT$
352.0
《
《全面与进步跨太平洋伙伴关系协定》国有企业条款研究
》
售價:NT$
449.0
《
银行业架构网络BIAN(全球数字化时代金融服务业框架)(数字化转型与创新管理丛书)
》
售價:NT$
449.0
《
金托邦:江湖中的沉重正义
》
售價:NT$
275.0
《
易经今解:释疑·解惑·见微
》
售價:NT$
403.0
《
东欧史(全二册)-“中间地带”的困境
》
售價:NT$
1010.0
《
虚拟资本:金融怎样挪用我们的未来
》
售價:NT$
352.0
《
刻意练习不生气
》
售價:NT$
179.0
編輯推薦:
本书全面介绍Scala这门针对JVM的编程语言,它集成了现代对象模型、函数式编程和先进类型系统的所有优势。通过大量的代码示例,本书向读者展示了如何高效地利用Scala语言及其生态系统,同时解释了为何Scala是开发高扩展性、以数据为中心的应用程序的理想语言。第2版还介绍了Scala的新特性,新增了模式匹配和高级函数式编程的章节。此外,读者还可以学到Scala的命令行工具、第三方工具、库等。
內容簡介:
本书通过大量的代码示例,全面介绍Scala这门针对JVM的编程语言,向读者展示了如何高效地利用Scala语言及其生态系统,同时解释了为何Scala是开发高扩展性、以数据为中心的应用程序的理想语言。本书既适合Scala初学者入门,也适合经验丰富的Scala开发者参考。
關於作者:
Dean Wampler博士是Typesafe公司的大数据产品架构师。Typesafe使用Scala、函数式编程、Spark、Hadoop以及Akka技术编写以数据为中心的工具和服务。Dean是《面向Java开发者的函数式编程》的作者,同时也与他人合著了《Hive编程指南》一书。Alex Payne是Twitter的平台组长。在Alex开发的服务基础上,其他的程序开发者构造了一套备受欢迎的社交消息服务。此前,Alex还为政治竞选、公益性组织以及初创企业编写过一些Web应用。
目錄 :
第1章 零到六十:Scala简介1
1.1 为什么选择Scala1
1.1.1 富有魅力的Scala2
1.1.2 关于Java 83
1.2 安装Scala3
1.2.1 使用SBT5
1.2.2 执行Scala命令行工具6
1.2.3 在IDE中运行Scala REPL8
1.3 使用Scala8
1.4 并发17
1.5 本章回顾与下一章提要27
第2章 更简洁,更强大28
2.1 分号28
2.2 变量声明29
2.3 Range31
2.4 偏函数32
2.5 方法声明33
2.5.1 方法默认值和命名参数列表33
2.5.2 方法具有多个参数列表34
2.5.3 Future简介35
2.5.4 嵌套方法的定义与递归38
2.6 推断类型信息40
2.7 保留字44
2.8 字面量46
2.8.1 整数字面量46
2.8.2 浮点数字面量47
2.8.3 布尔型字面量48
2.8.4 字符字面量48
2.8.5 字符串字面量48
2.8.6 符号字面量50
2.8.7 函数字面量50
2.8.8 元组字面量50
2.9 Option、Some 和None:避免使用null52
2.10 封闭类的继承53
2.11 用文件和名空间组织代码54
2.12 导入类型及其成员55
2.12.1 导入是相对的56
2.12.2 包对象57
2.13 抽象类型与参数化类型57
2.14 本章回顾与下一章提要59
第3章 要点详解60
3.1 操作符重载?60
3.2 无参数方法63
3.3 优先级规则64
3.4 领域特定语言65
3.5 Scala中的if语句66
3.6 Scala中的for推导式67
3.6.1 for循环67
3.6.2 生成器表达式67
3.6.3 保护式:筛选元素67
3.6.4 Yielding68
3.6.5 扩展作用域与值定义69
3.7 其他循环结构70
3.7.1 Scala的while循环71
3.7.2 Scala中的do-while循环71
3.8 条件操作符71
3.9 使用try、catch和final子句72
3.10 名字调用和值调用75
3.11 惰性赋值78
3.12 枚举79
3.13 可插入字符串81
3.14 Trait:Scala语言的接口和混入83
3.15 本章回顾与下一章提要85
第4章 模式匹配86
4.1 简单匹配86
4.2 match中的值、变量和类型87
4.3 序列的匹配90
4.4 元组的匹配94
4.5 case中的guard语句94
4.6 case类的匹配95
4.6.1 unapply方法96
4.6.2 unapplySeq方法100
4.7 可变参数列表的匹配101
4.8 正则表达式的匹配103
4.9 再谈case语句的变量绑定104
4.10 再谈类型匹配104
4.11 封闭继承层级与全覆盖匹配105
4.12 模式匹配的其他用法107
4.13 总结关于模式匹配的评价111
4.14 本章回顾与下一章提要111
第5章 隐式详解112
5.1 隐式参数112
5.2 隐式参数适用的场景115
5.2.1 执行上下文115
5.2.2 功能控制115
5.2.3 限定可用实例116
5.2.4 隐式证据120
5.2.5 绕开类型擦除带来的限制122
5.2.6 改善报错信息124
5.2.7 虚类型124
5.2.8 隐式参数遵循的规则127
5.3 隐式转换128
5.3.1 构建独有的字符串插入器132
5.3.2 表达式问题134
5.4 类型类模式135
5.5 隐式所导致的技术问题137
5.6 隐式解析规则139
5.7 Scala内置的各种隐式139
5.8 合理使用隐式146
5.9 本章回顾与下一章提要146
第6章 Scala函数式编程147
6.1 什么是函数式编程148
6.1.1 数学中的函数148
6.1.2 不可变变量149
6.2 Scala中的函数式编程151
6.2.1 匿名函数、Lambda与闭包152
6.2.2 内部与外部的纯粹性154
6.3 递归154
6.4 尾部调用和尾部调用优化155
6.5 偏应用函数与偏函数157
6.6 Curry化与函数的其他转换158
6.7 函数式编程的数据结构162
6.7.1 序列162
6.7.2 映射表166
6.7.3 集合168
6.8 遍历、映射、过滤、折叠与归约168
6.8.1 遍历169
6.8.2 映射170
6.8.3 扁平映射172
6.8.4 过滤173
6.8.5 折叠与归约174
6.9 向左遍历与向右遍历178
6.10 组合器:软件最佳组件抽象183
6.11 关于复制186
6.12 本章回顾与下一章提要188
第7章 深入学习for推导式189
7.1 内容回顾:for推导式组成元素189
7.2 for推导式:内部机制192
7.3 for推导式的转化规则194
7.4 Option以及其他的一些容器类型197
7.4.1 Option容器197
7.4.2 Either:Option类型的逻辑扩展200
7.4.3 Try类型205
7.4.4 Scalaz提供的Validation类206
7.5 本章回顾与下一章提要209
第8章 Scala面向对象编程210
8.1 类与对象初步211
8.2 引用与值类型213
8.3 价值类214
8.4 父类217
8.5 Scala的构造器217
8.6 类的字段221
8.6.1 统一访问原则223
8.6.2 一元方法224
8.7 验证输入224
8.8 调用父类构造器(与良好的面向对象设计)226
8.9 嵌套类型230
8.10 本章回顾与下一章提要232
第9章 特征 233
9.1 Java 8中的接口233
9.2 混入trait234
9.3 可堆叠的特征238
9.4 构造trait243
9.5 选择类还是trait244
9.6 本章回顾与下一章提要245
第10章 Scala对象系统(I)246
10.1 参数化类型:继承转化246
10.1.1 Hood下的函数247
10.1.2 可变类型的变异250
10.1.3 Scala和Java中的变异252
10.2 Scala的类型层次结构253
10.3 闲话Nothing(以及Null)254
10.4 Product、case类和元组258
10.5 Predef对象260
10.5.1 隐式转换260
10.5.2 类型定义262
10.5.3 条件检查方法263
10.5.4 输入输出方法263
10.5.5 杂项方法265
10.6 对象的相等265
10.6.1 equals方法266
10.6.2 == 和!=方法266
10.6.3 eq 和ne方法267
10.6.4 数组相等和sameElements方法267
10.7 本章回顾与下一章提要268
第11章 Scala对象系统(II)269
11.1 覆写类成员和trait成员269
11.2 尝试覆写final声明272
11.3 覆写抽象方法和具体方法272
11.4 覆写抽象字段和具体字段274
11.5 覆写抽象类型280
11.6 无须区分访问方法和字段:统一访问原则280
11.7 对象层次结构的线性化算法282
11.8 本章回顾与下一章提要287
第12章 Scala集合库288
12.1 通用、可变、不可变、并发以及并行集合288
12.1.1 scala.collection包289
12.1.2 collection.concurrent包290
12.1.3 collection.convert包291
12.1.4 collection.generic包291
12.1.5 collection.immutable包291
12.1.6 scala.collection.mutable包292
12.1.7 scala.collection.parallel包294
12.2 选择集合295
12.3 集合库的设计惯例296
12.3.1 Builder296
12.3.2 CanBuildFrom297
12.3.3 Like特征298
12.4 值类型的特化298
12.5 本章回顾与下一章提要300
第13章 可见性规则301
13.1 默认可见性:公有可见性301
13.2 可见性关键字302
13.3 Public可见性303
13.4 Protected可见性304
13.5 Private可见性305
13.6 作用域内私有和作用域内受保护可见性306
13.7 对可见性的想法312
13.8 本章回顾与下一章提要313
第14章 Scala类型系统(I)314
14.1 参数化类型315
14.1.1 变异标记315
14.1.2 类型构造器315
14.1.3 类型参数的名称315
14.2 类型边界315
14.2.1 类型边界上限316
14.2.2 类型边界下限316
14.3 上下文边界320
14.4 视图边界320
14.5 理解抽象类型322
14.6 自类型标记325
14.7 结构化类型329
14.8 复合类型332
14.9 存在类型334
14.10 本章回顾与下一章提要335
第15章 Scala类型系统(II)336
15.1 路径相关类型336
15.1.1 C.this337
15.1.2 C.super337
15.1.3 path.x338
15.2 依赖方法类型339
15.3 类型投影340
15.4 值的类型343
15.4.1 元组类型343
15.4.2 函数类型343
15.4.3 中缀类型343
15.5 Higher-Kinded类型344
15.6 类型Lambda348
15.7 自递归类型:F-Bounded多态350
15.8 本章回顾与下一章提要351
第16章 高级函数式编程352
16.1 代数数据类型352
16.1.1 加法类型与乘法类型352
16.1.2 代数数据类型的属性354
16.1.3 代数数据类型的最后思考355
16.2 范畴理论355
16.2.1 关于范畴356
16.2.2 Functor范畴356
16.2.3 Monad范畴360
16.2.4 Monad的重要性362
16.3 本章回顾与下一章提要363
第17章 并发工具365
17.1 scala.sys.process包365
17.2 Future类型367
17.3 利用Actor模型构造稳固且可扩展的并发应用371
17.4 Akka:为Scala设计的Actor系统372
17.5 Pickling和Spores383
17.6 反应式编程384
17.7 本章回顾与下一章提要385
第18章 Scala与大数据386
18.1 大数据简史386
18.2 用Scala改善MapReduce387
18.3 超越MapReduce392
18.4 数学范畴393
18.5 Scala数据工具列表394
18.6 本章回顾与下一章提要394
第19章 Scala动态调用396
19.1 一个较为激进的示例:Ruby on Rails框架中的ActiveRecord库396
19.2 使用动态特征实现Scala 中的动态调用397
19.3 关于DSL的一些思考402
19.4 本章回顾与下一章提要402
第20章 Scala的领域特定语言403
20.1 DSL 示例:Scala中XML和JSON DSL404
20.2 内部DSL406
20.3 包含解析组合子的外部DSL410
20.3.1 关于解析组合子410
20.3.2 计算工资单的外部DSL410
20.4 内部DSL与外部DSL:最后的思考413
20.5 本章回顾与下一章提要413
第21章 Scala工具和库414
21.1 命令行工具414
21.1.1 命令行工具:scalac414
21.1.2 Scala命令行工具418
21.1.3 scalap和javap命令行工具421
21.1.4 scaladoc 命令行工具422
21.1.5 fsc命令行工具422
21.2 构建工具422
21.2.1 SBT:Scala标准构建工具423
21.2.2 其他构建工具425
21.3 与IDE或文本编辑器集成425
21.4 在Scala中应用测试驱动开发426
21.5 第三方库427
21.6 本章回顾与下一章提要429
第22章 与Java的互操作430
22.1 在Scala代码中使用Java名称430
22.2 Java泛型与Scala泛型430
22.3 JavaBean的性质432
22.4 AnyVal类型与Java原生类型433
22.5 Java代码中的Scala名称433
22.6 本章回顾与下一章提要434
第23章 应用程序设计435
23.1 回顾之前的内容435
23.2 注解437
23.3 Trait即模块441
23.4 设计模式442
23.4.1 构造型模式443
23.4.2 结构型模式443
23.4.3 行为型模式444
23.5 契约式设计带来更好的设计446
23.6 帕特农神庙架构448
23.7 本章回顾与下一章提要453
第24章 元编程:宏与反射454
24.1 用于理解类型的工具455
24.2 运行时反射455
24.2.1 类型反射455
24.2.2 ClassTag、TypeTag与Manifest457
24.3 Scala 的高级运行时反射API458
24.4 宏461
24.4.1 宏的示例:强制不变性463
24.4.2 关于宏的最后思考466
24.5 本章回顾与下一章提要466
附录A 参考文献468
作者简介473
关于封面473