Scala相拥函数式编程设计风格,又沒有抛下面向对象编程的程序编写现代性,能够 编写出比Java更精减的程序流程。因为运作在JVM之中,可浏览一切Java类库,能跟Java架构互操作,也更非常容易地充分发挥并发编程的杀伤力。
《快学Scala(第2版)》详细介绍Scala这些能给你迅速入门干活的关键定义和方法,却并不尝试穷举法全部語言特性,也不会用冗杂、过度机巧的实例来,只是细心掂量事例和训练,依照清楚界定的能力等级引导你变成权威专家。
*迅速了解Scala编译器、英语的语法、专用工具和特有的应用习惯性
*把握关键語言特性:涵数、数组、投射、元组、包、导入、异常处理等
*了解Scala面向对象思想:类、承继和个性特征
*应用Scala解决现实世界的程序编写每日任务:实际操作文档、正则表达式和XML
*应用高阶函数和功能齐全的Scala结合类库
*利用Scala强劲的模式匹配和示例类
*利用Scala的future搭建并发程序
*完成行业特殊語言
*了解Scala种类系统软件
*运用高級的“超强力专用工具”,如注释、隐式变换和隐式主要参数、种类类等
Scala是一门关键以Javavm虚拟机(JVM)为总体目标软件环境并将面向对象编程和函数式编程語言的*特性融合在一起的计算机语言。你能应用Scala编写出更为精减的程序流程,另外充足利用高并发的杀伤力。因为Scala默认设置运作于JVM之中,因而它能够 浏览一切Java类库而且与Java架构开展互操作。根据ScalaJS新项目,Scala还能够被编写出JavaScript编码,我们一起更方便快捷高效率地开发设计Web运用。这书从好用视角考虑,得出了一份迅速的、根据编码的新手入门手册。Horstmann以“网络文章尺寸”的篇数详细介绍了Scala的定义,让你能迅速地把握和运用。事实上手的实际操作,清楚界定的能力层级,从初中级到大师级,全线具体指导。合适有一定的Java程序编写工作经验、对Scala很感兴趣,并期待尽早把握Scala关键定义和使用方法的开发人员阅读文章。
目录
- 译者序 V
- 第1版序 XVII
- 前言 XIX
- 作者简介 XXIII
- 第1章 基础 A1 1
- 1.1 Scala解释器 1
- 1.2 声明值和变量 4
- 1.3 常用类型 5
- 1.4 算术和操作符重载 7
- 1.5 关于方法调用 8
- 1.6 apply方法 9
- 1.7 Scaladoc 11
- 练习 16
- 第2章 控制结构和函数 A1 19
- 2.1 条件表达式 20
- 2.2 语句终止 22
- 2.3 块表达式和赋值 22
- 2.4 输入和输出 23
- 2.5 循环 25
- 2.6 高级for循环 27
- 2.7 函数 28
- 2.8 默认参数和带名参数 L1 29
- 2.9 变长参数 L1 29
- 2.10 过程 31
- 2.11 懒值 L1 31
- 2.12 异常 32
- 练习 35
- 第3章 数组相关操作 A1 39
- 3.1 定长数组 39
- 3.2 变长数组:数组缓冲 40
- 3.3 遍历数组和数组缓冲 41
- 3.4 数组转换 42
- 3.5 常用算法 44
- 3.6 解读Scaladoc 45
- 3.7 多维数组 47
- 3.8 与Java的互操作 48
- 练习 49
- 第4章 映射和元组 A1 53
- 4.1 构造映射 53
- 4.2 获取映射中的值 54
- 4.3 更新映射中的值 55
- 4.4 迭代映射 56
- 4.5 已排序映射 57
- 4.6 与Java的互操作 57
- 4.7 元组 58
- 4.8 拉链操作 59
- 练习 60
- 第5章 类 A1 63
- 5.1 简单类和无参方法 63
- 5.2 带getter和setter的属性 64
- 5.3 只带getter的属性 67
- 5.4 对象私有字段 68
- 5.5 Bean属性 L1 69
- 5.6 辅助构造器 71
- 5.7 主构造器 72
- 5.8 嵌套类 L175
- 练习 78
- 第6章 对象 A1 81
- 6.1 单例对象 81
- 6.2 伴生对象 82
- 6.3 扩展类或特质的对象 83
- 6.4 apply方法 84
- 6.5 应用程序对象 85
- 6.6 枚举 86
- 练习 87
- 第7章 包和引入 A1 91
- 7.1 包 91
- 7.2 作用域规则 93
- 7.3 串联式包语句 95
- 7.4 文件顶部标记法 95
- 7.5 包对象 96
- 7.6 包可见性 97
- 7.7 引入 97
- 7.8 任何地方都可以声明引入 98
- 7.9 重命名和隐藏方法 99
- 7.10 隐式引入 99
- 练习 100
- 第8章 继承 A1 103
- 8.1 扩展类 103
- 8.2 重写方法 104
- 8.3 类型检查和转换 105
- 8.4 受保护字段和方法 106
- 8.5 超类的构造 106
- 8.6 重写字段 107
- 8.7 匿名子类 109
- 8.8 抽象类 109
- 8.9 抽象字段 110
- 8.10 构造顺序和提前定义 L3 110
- 8.11 Scala类继承关系 112
- 8.12 对象相等性 L1 114
- 8.13 值类 L2 116
- 练习 117
- 第9章 文件和正则表达式 A1 121
- 9.1 读取行 121
- 9.2 读取字符 122
- 9.3 读取词法单元和数字 123
- 9.4 从URL或其他源读取 124
- 9.5 读取二进制文件 124
- 9.6 写入文本文件 124
- 9.7 访问目录 125
- 9.8 序列化 125
- 9.9 进程控制 A2126
- 9.10 正则表达式 129
- 9.11 正则表达式组 130
- 练习 131
- 第10章 特质 A1135
- 10.1 为什么没有多重继承 135
- 10.2 当作接口使用的特质 137
- 10.3 带有具体实现的特质 138
- 10.4 带有特质的对象 139
- 10.5 叠加在一起的特质 140
- 10.6 在特质中重写抽象方法 141
- 10.7 当作富接口使用的特质 142
- 10.8 特质中的具体字段 143
- 10.9 特质中的抽象字段 144
- 10.10 特质构造顺序 145
- 10.11 初始化特质中的字段 147
- 10.12 扩展类的特质 148
- 10.13 自身类型 L2 149
- 10.14 背后发生了什么 151
- 练习 152
- 第11章 操作符 A1157
- 11.1 标识符 157
- 11.2 中置操作符 158
- 11.3 一元操作符 159
- 11.4 赋值操作符 160
- 11.5 优先级 161
- 11.6 结合性 162
- 11.7 apply和update方法 162
- 11.8 提取器 L2 164
- 11.9 带单个参数或无参数的提取器 L2166
- 11.10 unapplySeq方法 L2167
- 11.11 动态调用 L2 167
- 练习 171
- 第12章 高阶函数 L1 175
- 12.1 作为值的函数 175
- 12.2 匿名函数 177
- 12.3 带函数参数的函数 178
- 12.4 参数(类型)推断 179
- 12.5 一些有用的高阶函数 180
- 12.6 闭包 181
- 12.7 SAM转换 182
- 12.8 柯里化 183
- 12.9 控制抽象 185
- 12.10 return表达式 186
- 练习 187
- 第13章 集合 A2191
- 13.1 主要的集合特质 192
- 13.2 可变和不可变集合 193
- 13.3 序列 195
- 13.4 列表 196
- 13.5 集 197
- 13.6 用于添加或去除元素的操作符 198
- 13.7 常用方法 201
- 13.8 将函数映射到集合 203
- 13.9 化简、折叠和扫描 A3 205
- 13.10 拉链操作 209
- 13.11 迭代器 210
- 13.12 流 A3 211
- 13.13 懒视图 A3 213
- 13.14 与Java集合的互操作 213
- 13.15 并行集合 215
- 练习 217
- 第14章 模式匹配和样例类 A2 221
- 14.1 更好的switch 222
- 14.2 守卫 223
- 14.3 模式中的变量 223
- 14.4 类型模式 224
- 14.5 匹配数组、列表和元组 225
- 14.6 提取器 227
- 14.7 变量声明中的模式 227
- 14.8 for表达式中的模式 229
- 14.9 样例类 229
- 14.10 copy方法和带名参数 230
- 14.11 case语句中的中置表示法 231
- 14.12 匹配嵌套结构 232
- 14.13 样例类是邪恶的吗 233
- 14.14 密封类 234
- 14.15 模拟枚举 235
- 14.16 Option类型 235
- 14.17 偏函数 L2 236
- 练习 238
- 第15章 注解 A2243
- 15.1 什么是注解 243
- 15.2 什么可以被注解 244
- 15.3 注解参数 245
- 15.4 注解实现 246
- 15.5 针对Java特性的注解 247
- 15.5.1 Java修饰符 247
- 15.5.2 标记接口 248
- 15.5.3 受检异常 249
- 15.5.4 变长参数 249
- 15.5.5 JavaBeans 250
- 15.6 用于优化的注解 250
- 15.6.1 尾递归 .250
- 15.6.2 跳转表生成与内联 252
- 15.6.3 可省略方法 253
- 15.6.4 基本类型的特殊化 254
- 15.7 用于错误和警告的注解 255
- 练习 256
- 第16章 XML处理 A2 259
- 16.1 XML字面量 260
- 16.2 XML节点 260
- 16.3 元素属性 262
- 16.4 内嵌表达式 263
- 16.5 在属性中使用表达式 264
- 16.6 特殊节点类型 265
- 16.7 类XPath表达式 266
- 16.8 模式匹配 267
- 16.9 修改元素和属性 268
- 16.10 XML变换 269
- 16.11 加载和保存 270
- 16.12 命名空间 273
- 练习 275
- 第17章 Future A2 277
- 17.1 在future中运行任务 278
- 17.2 等待结果 280
- 17.3 Try类 281
- 17.4 回调 282
- 17.5 组合future任务 283
- 17.6 其他future变换 286
- 17.7 Future对象中的方法 288
- 17.8 Promise 289
- 17.9 执行上下文 291
- 练习 292
- 第18章 类型参数 L2 297
- 18.1 泛型类 298
- 18.2 泛型函数 298
- 18.3 类型变量界定 298
- 18.4 视图界定 300
- 18.5 上下文界定 301
- 18.6 ClassTag上下文界定 301
- 18.7 多重界定 302
- 18.8 类型约束 L3302
- 18.9 型变 304
- 18.10 协变和逆变点 305
- 18.11 对象不能泛型 307
- 18.12 类型通配符 308
- 练习 309
- 第19章 高级类型 L2 313
- 19.1 单例类型 313
- 19.2 类型投影 315
- 19.3 路径 316
- 19.4 类型别名 317
- 19.5 结构类型 318
- 19.6 复合类型 319
- 19.7 中置类型 320
- 19.8 存在类型 321
- 19.9 Scala类型系统 322
- 19.10 自身类型 323
- 19.11 依赖注入 325
- 19.12 抽象类型 L3 327
- 19.13 家族多态 L3 329
- 19.14 高等类型 L3 333
- 练习 336
- 第20章 解析 A3 341
- 20.1 文法 342
- 20.2 组合解析器操作 343
- 20.3 解析器结果变换 345
- 20.4 丢弃词法单元 347
- 20.5 生成解析树 348
- 20.6 避免左递归 348
- 20.7 更多的组合子 350
- 20.8 避免回溯 352
- 20.9 记忆式解析器 353
- 20.10 解析器说到底是什么 354
- 20.11 正则解析器 355
- 20.12 基于词法单元的解析器 356
- 20.13 错误处理 358
- 练习 359
- 第21章 隐式转换和隐式参数 L3. 363
- 21.1 隐式转换 363
- 21.2 利用隐式转换丰富现有类库的功能 364
- 21.3 引入隐式转换 365
- 21.4 隐式转换规则 367
- 21.5 隐式参数 368
- 21.6 利用隐式参数进行隐式转换 370
- 21.7 上下文界定 371
- 21.8 类型类 372
- 21.9 类型证明 374
- 21.10 @implicitNotFound注解 376
- 21.11 CanBuildFrom解读 376
- 练习 379
- 词汇表 381