Scala编程(第5版)

Scala编程(第5版)
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [德]
2022-02
版次: 1
ISBN: 9787121428326
定价: 188.00
装帧: 其他
开本: 其他
纸张: 胶版纸
页数: 656页
8人买过
  • 本书由直接参与 Scala 开发的一线人员编写,深入介绍了 Scala 这门结合面向对象和函数式的编程语言的核心特性和设计取舍。继第 4 版后,时隔一年,本书迎来重大更新,内容覆盖 Scala 3.0,对新的缩进语法、并集类型、交集类型、枚举、代数数据类型、上下文参数、特质参数、扩展方法、类型族等都有详细介绍。本书适合有一定编程经验的开发者阅读,尤其是对 Scala 3.0 新特性感兴趣的开发者朋友。即便是不直接使用 Scala 的读者,也能从本书中学到大量关于函数式和面向对象的编程概念和技巧。 Martin Odersky 是 Scala 编程语言的缔造者。他是瑞士洛桑理工学院(EPFL)的教授,同时也是 Lightbend 的创始人。他的研究方向是编程语言和系统,更具体地说,就是如何将面向对象和函数式编程风格有机地结合在一起。自 2001 年起,他的主要精力集中在设计、实现和改进 Scala 上。在此之前,他作为 Java 泛型的合作设计者参与了 Java 编程语言的开发,同时也是当前 javac 参考实现的作者。他还是 ACM 院士。Lex Spoon 是 Semmle Ltd. 的一名软件工程师。作为博士后,他在 EPFL围绕着 Scala 开展了大约两年的工作。他拥有 Georgia Tech 的博士学位,在那里他的主攻方向是动态编程语言的静态分析。除 Scala 外,他还帮助开发了各类编程语言,包括动态语言 Smalltalk、科学计算语言 X10,以及支撑 Semmle的逻辑编程语言。他和他的夫人一起生活在 Atlanta,他们有两只猫和一只吉娃娃。Bill Venners 是 Artima Inc.的总裁,Artima 开发者网站的发行人,提供Scala 咨询、培训、书籍和工具。他著有《深入 Java 虚拟机》,这是一本面向程序员讲解 Java 平台架构和内部实现原理的书。他在 JavaWorld 杂志上的专栏很受欢迎,主题涵盖 Java 内部实现、面向对象的设计和 Jini。Bill 是 ScalaCenter 咨询委员会的社区代表,还是测试框架 ScalaTest 和针对函数式、面向对象编程类库 Scalactic 的主要开发者和设计者。Frank Sommers 是 Autospaces Inc.的创始人和总裁,该公司为金融服务行业提供自动化的工作流解决方案。在过去的 12 年间,Frank Sommers 一直是活跃的 Scala 用户,几乎每天都在使用这门编程语言。

    译者:高宇翔,资深软件开发工程师和系统架构师,同时也是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  为什么要用Scala9

    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  模拟API351

    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  抽象的val423

    20.4  抽象的var424

    20.5  初始化抽象的val425

    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和LinearSeq539

    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 开发的一线人员编写,深入介绍了 Scala 这门结合面向对象和函数式的编程语言的核心特性和设计取舍。继第 4 版后,时隔一年,本书迎来重大更新,内容覆盖 Scala 3.0,对新的缩进语法、并集类型、交集类型、枚举、代数数据类型、上下文参数、特质参数、扩展方法、类型族等都有详细介绍。本书适合有一定编程经验的开发者阅读,尤其是对 Scala 3.0 新特性感兴趣的开发者朋友。即便是不直接使用 Scala 的读者,也能从本书中学到大量关于函数式和面向对象的编程概念和技巧。
  • 作者简介:
    Martin Odersky 是 Scala 编程语言的缔造者。他是瑞士洛桑理工学院(EPFL)的教授,同时也是 Lightbend 的创始人。他的研究方向是编程语言和系统,更具体地说,就是如何将面向对象和函数式编程风格有机地结合在一起。自 2001 年起,他的主要精力集中在设计、实现和改进 Scala 上。在此之前,他作为 Java 泛型的合作设计者参与了 Java 编程语言的开发,同时也是当前 javac 参考实现的作者。他还是 ACM 院士。Lex Spoon 是 Semmle Ltd. 的一名软件工程师。作为博士后,他在 EPFL围绕着 Scala 开展了大约两年的工作。他拥有 Georgia Tech 的博士学位,在那里他的主攻方向是动态编程语言的静态分析。除 Scala 外,他还帮助开发了各类编程语言,包括动态语言 Smalltalk、科学计算语言 X10,以及支撑 Semmle的逻辑编程语言。他和他的夫人一起生活在 Atlanta,他们有两只猫和一只吉娃娃。Bill Venners 是 Artima Inc.的总裁,Artima 开发者网站的发行人,提供Scala 咨询、培训、书籍和工具。他著有《深入 Java 虚拟机》,这是一本面向程序员讲解 Java 平台架构和内部实现原理的书。他在 JavaWorld 杂志上的专栏很受欢迎,主题涵盖 Java 内部实现、面向对象的设计和 Jini。Bill 是 ScalaCenter 咨询委员会的社区代表,还是测试框架 ScalaTest 和针对函数式、面向对象编程类库 Scalactic 的主要开发者和设计者。Frank Sommers 是 Autospaces Inc.的创始人和总裁,该公司为金融服务行业提供自动化的工作流解决方案。在过去的 12 年间,Frank Sommers 一直是活跃的 Scala 用户,几乎每天都在使用这门编程语言。

    译者:高宇翔,资深软件开发工程师和系统架构师,同时也是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  为什么要用Scala9

    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  模拟API351

    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  抽象的val423

    20.4  抽象的var424

    20.5  初始化抽象的val425

    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和LinearSeq539

    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编程(第5版)
Scratch编程进阶:图形化(上、下册)
明日之星教研中心 编著
Scala编程(第5版)
Scratch科学小实验
朱晔
Scala编程(第5版)
Schur01不等式软件
陈胜利 著
Scala编程(第5版)
Scheimpflug眼前节综合诊断分析仪临床应用
黄锦海
Scala编程(第5版)
Scratch创意编程基础
张建军 主编;房桂兵
Scala编程(第5版)
Scratch编程从入门到精通(第2版)
谢声涛
Scala编程(第5版)
Scratch编程思维一点通(视频教学版)(上册)
邹赫;姚国才
Scala编程(第5版)
Scratch编程入门:无人车(上、下册)
明日之星教研中心 编著
Scala编程(第5版)
Scratch趣味编程
李姗 龙慧 赵娜 著
Scala编程(第5版)
Scikit-Learn、Keras和TensorFlow的机器学习实用指南 第3版(影印版)
[法]奥雷利安·吉翁
Scala编程(第5版)
Scratch编程思维一点通(视频教学版)(下册)
邹赫;姚国才
Scala编程(第5版)
Scala编程实战(原书第2版)
阿尔文·亚历山大
您可能感兴趣 / 更多