好书推荐 好书速递 排行榜 读书文摘

Scala编程(第5版)

Scala编程(第5版)
作者:【德】Martin Odersky 等
译者:高宇翔
副标题:基于Scala 3.0
出版社:电子工业出版社
出版年:2022-02
ISBN:9787121428326
行业:计算机
浏览数:68

内容简介

《Scala编程(第5版)》由直接参与 Scala 开发的一线人员编写,深入介绍了 Scala 这门结合面向对象和函数式的编程语言的核心特性和设计取舍。继第 4 版后,时隔一年,本书迎来重大更新,内容覆盖 Scala 3.0,对新的缩进语法、并集类型、交集类型、枚举、代数数据类型、上下文参数、特质参数、扩展方法、类型族等都有详细介绍。本书适合有一定编程经验的开发者阅读,尤其是对 Scala 3.0 新特性感兴趣的开发者朋友。即便是不直接使用 Scala 的读者,也能从本书中学到大量关于函数式和面向对象的编程概念和技巧。

......(更多)

作者简介

Martin Odersky是Scala语言的缔造者。他是瑞士洛桑理工学院(EPFL)的教授,自2001年起,由他带领的团队开发了Scala语言、类库和编译器。他同时是Lightbend公司的创始人,参与设计了Java泛型,还是当前javac编译器参考实现的原作者。

Lex Spoon在EPFL开展了为期两年的Scala工作,目前是Square公司的软件工程师。

Bill Venners是Artima公司总裁,是Scala Center咨询委员会的社区代表,还是测试框架ScalaTest的设计者。

Frank Sommers是Autospaces公司的总裁。

译者简介

高宇翔,资深软件开发工程师和系统架构师,同时也是Scala在国内的早期布道者和实践者,曾译有《Scala编程》(第1版)、《Scala编程》(第3版)、《Scala编程》(第4版),以及《快学Scala》(第1版)、《快学Scala》(第2版)等广为人知的Scala语言技术名著。

关于中文版审校者:钟伦甫,Scala爱好者和早期布道者。2012年在淘宝中间件团队任职技术专家期间,用Scala编写过一款名为HouseMD 的JVM诊断工具并开源。后又作为联合译者,参与了《Scala函数式编程》一书的翻译;黄胜涛,有10年以上系统运维和8年以上软件开发经验,曾就职于携程旅行网、LOTTE,目前在上海昱极科技有限公司从事DevOps方面工作。

......(更多)

目录

序 XIX

引言 XXIII

第1章 一门可伸缩的语言 1

1.1 一门按需伸缩的语言 2

1.2 是什么让Scala能屈能伸 6

1.3 为什么要用Scala 9

1.4 Scala寻根 17

1.5 结语 19

第2章 Scala入门 20

第1步 使用Scala解释器 21

第2步 定义变量 22

第3步 定义函数 25

第4步 编写Scala脚本 27

第5步 用while做循环;用if做判断 29

第6步 用foreach方法和for-do遍历 31

结语 34

第3章 Scala入门(续) 35

第7步 用类型参数化数组 35

第8步 使用列表 40

第9步 使用元组 44

第10步 使用集和映射 45

第11步 识别函数式编程风格 50

第12步 用map方法和for-yield变换 53

结语 57

第4章 类和对象 58

4.1 类、字段和方法 58

4.2 分号推断 63

4.3 单例对象 64

4.4 样例类 67

4.5 Scala应用程序 69

4.6 结语 71

第5章 基础类型和操作 72

5.1 一些基础类型 72

5.2 字面量 73

5.3 字符串插值 79

5.4 操作符即方法 81

5.5 算术操作 84

5.6 关系和逻辑操作 85

5.7 位运算操作 87

5.8 对象相等性 88

5.9 操作符优先级和结合律 90

5.10 富包装类 93

5.11 结语 94

第6章 函数式对象 95

6.1 Rational类的规格定义 95

6.2 构建Rational实例 96

6.3 重新实现toString方法 98

6.4 检查前提条件 99

6.5 添加字段 100

6.6 自引用 102

6.7 辅助构造方法 103

6.8 私有字段和方法 105

6.9 定义操作符 106

6.10 Scala中的标识符 108

6.11 方法重载 111

6.12 扩展方法 113

6.13 注意事项 114

6.14 结语 115

第7章 内建的控制结构 116

7.1 if表达式 117

7.2 while循环 118

7.3 for表达式 121

7.4 用try表达式实现异常处理 127

7.5 match表达式 131

7.6 没有break和continue的日子 133

7.7 变量作用域 135

7.8 对指令式代码进行重构 139

7.9 结语 141

第8章 函数和闭包 142

8.1 方法 142

8.2 局部函数 143

8.3 一等函数 145

8.4 函数字面量的简写形式 147

8.5 占位符语法 148

8.6 部分应用的函数 149

8.7 闭包 152

8.8 特殊的函数调用形式 154

8.9 SAM类型 158

8.10 尾递归 159

8.11 结语 163

第9章 控制抽象 164

9.1 减少代码重复 164

9.2 简化调用方代码 168

9.3 柯里化 170

9.4 编写新的控制结构 172

9.5 传名参数 175

9.6 结语 178

第10章 组合和继承 179

10.1 一个二维的布局类库 179

10.2 抽象类 180

10.3 定义无参方法 182

10.4 扩展类 184

10.5 重写方法和字段 187

10.6 定义参数化字段 188

10.7 调用超类构造方法 189

10.8 使用override修饰符 191

10.9 多态和动态绑定 192

10.10 声明final成员 195

10.11 使用组合和继承 196

10.12 实现above、beside和toString方法 198

10.13 定义工厂对象 201

10.14 增高和增宽 204

10.15 放在一起 205

10.16 结语 207

第11章 特质 208

11.1 特质如何工作 208

11.2 瘦接口和富接口 211

11.3 作为可叠加修改的特质 214

11.4 为什么不用多重继承 218

11.5 特质参数 223

11.6 结语 225

第12章 包、引入和导出 227

12.1 将代码放进包里 227

12.2 对相关代码的精简访问 229

12.3 引入 232

12.4 隐式引入 236

12.5 访问修饰符 237

12.6 顶层定义 242

12.7 导出 243

12.8 结语 247

第13章 样例类和模式匹配 248

13.1 一个简单的例子 248

13.2 模式的种类 253

13.3 模式守卫 264

13.4 模式重叠 265

13.5 密封类 267

13.6 对Option进行模式匹配 269

13.7 到处都是模式 271

13.8 一个复杂的例子 276

13.9 结语 284

第14章 使用列表 285

14.1 List字面量 285

14.2 List类型 286

14.3 构建列表 287

14.4 列表的基本操作 287

14.5 列表模式 289

14.6 List类的初阶方法 291

14.7 List类的高阶方法 303

14.8 List对象的方法 311

14.9 同时处理多个列表 313

14.10 理解Scala的类型推断算法 315

14.11 结语 319

第15章 使用其他集合类 320

15.1 序列 320

15.2 集和映射 324

15.3 在可变和不可变集合之间选择 331

15.4 初始化集合 334

15.5 元组 337

15.6 结语 340

第16章 可变对象 341

16.1 什么样的对象是可变的 341

16.2 可被重新赋值的变量和属性 344

16.3 案例分析:离散事件模拟 347

16.4 用于描述数字电路的语言 348

16.5 模拟API 351

16.6 电路模拟 356

16.7 结语 363

第17章 Scala的继承关系 365

17.1 Scala的类继承关系 365

17.2 基本类型的实现机制 369

17.3 底类型 371

17.4 定义自己的值类型 372

17.5 交集类型 376

17.6 并集类型 377

17.7 透明特质 380

17.8 结语 382

第18章 类型参数化 383

18.1 函数式队列 383

18.2 信息隐藏 387

18.3 型变注解 390

18.4 检查型变注解 396

18.5 下界 399

18.6 逆变 401

18.7 上界 404

18.8 结语 407

第19章 枚举 408

19.1 枚举数据类型 408

19.2 代数数据类型 413

19.3 泛化代数数据类型 415

19.4 为什么说ADT是代数数据类型 416

19.5 结语 420

第20章 抽象成员 421

20.1 抽象成员概览 421

20.2 类型成员 422

20.3 抽象的val 423

20.4 抽象的var 424

20.5 初始化抽象的val 425

20.6 抽象类型 433

20.7 路径依赖类型 436

20.8 改良类型 438

20.9 案例分析:货币 439

20.10 结语 450

第21章 上下文参数 451

21.1 上下文参数的工作原理 452

21.2 参数化的上下文参数类型 456

21.3 匿名上下文参数 461

21.4 作为类型族的参数化上下文参数 463

21.5 上下文参数的引入 466

21.6 上下文参数的规则 468

21.7 当有多个上下文参数可选时 471

21.8 调试上下文参数 473

21.9 结语 475

第22章 扩展方法 476

22.1 扩展方法的基础 476

22.2 泛化的扩展方法 479

22.3 成组的扩展方法 481

22.4 使用类型族 484

22.5 针对上下文参数的扩展方法 486

22.6 Scala如何查找扩展方法 491

22.7 结语 492

第23章 类型族 493

23.1 为什么要用类型族 493

23.2 上下文界定 499

23.3 主方法 502

23.4 跨界相等性 506

23.5 隐式转换 512

23.6 类型族案例分析:JSON序列化 515

23.7 结语 526

第24章 深入集合类 527

24.1 可变和不可变集合 528

24.2 集合的一致性 530

24.3 Iterable特质 532

24.4 序列型特质Seq、IndexedSeq和LinearSeq 539

24.5 集 544

24.6 映射 548

24.7 具体的不可变集合类 553

24.8 具体的可变集合类 560

24.9 数组 565

24.10 字符串 570

24.11 性能特征 571

24.12 相等性 573

24.13 视图 574

24.14 迭代器 579

24.15 从头创建集合 585

24.16 Java和Scala集合互转 587

24.17 结语 589

第25章 断言和测试 590

25.1 断言 590

25.2 用Scala写测试 592

25.3 翔实的失败报告 594

25.4 作为规格说明的测试 596

25.5 基于属性的测试 599

25.6 组织和运行测试 601

25.7 结语 603

术语表 604

关于作者 627

......(更多)

读书文摘

scala> implicit def intToRational(x: Int) = new Rational(x)

......(更多)

猜你喜欢

点击查看