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

Scala编程

Scala编程
作者:Martin Odersky、Lex Spoon、Bill Venners 著
译者:黄海旭 / 高宇翔
出版社:电子工业出版社
出版年:2010-12
ISBN:9787121121197
行业:计算机
浏览数:35

内容简介

本书介绍了一种新的编程语言,它把面向对象和函数式编程概念有机地结合为整体,从而形成一种完整统一、语义丰富的新思维体系。本书循序渐进,由浅入深,经作者精心组织、仔细编排,将语言中的各种概念自然地铺陈在字里行间。除此之外,本书还包含了大量富有针对性和趣味性的示例,它们除了提供对语言各个方面的具体演示之外,还从侧面说明了如何将函数式编程的理念切实并广泛地应用到面向对象编程中。本书面向的读者是有一定编程经验的开发人员,他们希望能够开拓眼界,并致力于提高在软件开发各方面的技能。

......(更多)

作者简介

关于作者

Martin Odersky是Scala语言的创造者。作为瑞士洛桑联邦理工学院(EPFL)的教授,他主要从事编程语言领域的工作。更具体地说,是面向对象和函数式编程的语言。他研究的论题是,这两种编程模式是硬币的两面,应该被尽可能地统一在一起。为了证明这点,他已试验性地设计了大量的语言,从Pizza到GJ到Functional Nets语言 。他还作为Java泛型的联合设计师及当前javac参考编译器的原作者影响了Java的发展。从2001年起,他主要从事Scala编程语言的设计、实现及改进工作。

Lex Spoon是Google的软件工程师。他以EPFL博士后身份在Scala方面工作了两年时间,从佐治亚理工学院(Georgia Tech)获得计算机科学的博士学位。那时他的主要工作是动态语言的静态分析。除了Scala之外,他还从事大量其他的编程语言工作,范围从动态语言Smalltalk到科学性语言X10。他和他的妻子,两只猫、一条吉娃娃还有一只乌龟,现生活于亚特兰大。

Bill Venners是Artima的总裁,兼Artima开发者网站(www.artima.com)的发行人。他是《深入Java虚拟机》(“Inside the Java Virtual Machine”)的作者,该书是定向为程序员的Java平台架构和内部组织的总体研究。他在JavaWorld杂志上有很受欢迎的专栏,内容涵盖Java内部机制,面向对象设计,还有Jini。Bill从Jini诞生伊始就活跃于Jini社区,他曾领导Jini社区的ServiceUI项目,而其中的ServiceUI API已经变成了联系用户界面和Jini服务之间的事实标准。Bill还是ScalaTest(Scala和Java开发的开源测试工具)的首席开发者(lead developer)和设计者。

......(更多)

目录

目录 ix

图示清单 xvii

表格清单 xix

代码清单 xxi

序 I

致谢 III

简介 V

第1章 可伸展的语言 3

1.1 与你一同成长的语言 3

1.2 是什么让Scala具有可扩展性? 6

1.3 为什么选择Scala? 8

1.4 Scala的根源 13

1.5 小结 14

第2章 Scala入门初探 15

2.1 第一步 学习使用Scala解释器 15

2.2 第二步 变量定义 16

2.3 第三步 函数定义 18

2.4 第四步 编写Scala脚本 19

2.5 第五步 用while做循环;用if做判断 20

2.6 第六步 用foreach和for做枚举 21

2.7 小结 22

第3章 Scala入门再探 23

3.1 第七步 使用类型参数化数组(Array) 23

3.2 第八步 使用列表(List) 25

3.3 第九步 使用元组(Tuple) 28

3.4 第十步 使用集(set)和映射(map) 29

3.5 第十一步 学习识别函数式风格 32

3.6 第十二步 从文件里读取文本行 34

3.7 小结 36

第4章 类和对象 37

4.1 类、字段和方法 37

4.2 分号推断 40

4.3 Singleton对象 41

4.4 Scala程序 43

4.5 Application特质 45

4.6 小结 45

第5章 基本类型和操作 47

5.1 基本类型 47

5.2 字面量 48

5.3 操作符和方法 52

5.4 数学运算 54

5.5 关系和逻辑操作 55

5.6 位操作符 56

5.7 对象相等性 57

5.8 操作符的优先级和关联性 58

5.9 富包装器 60

5.10 小结 60

第6章 函数式对象 61

6.1 类Rational的规格说明书 61

6.2 创建Rational 62

6.3 重新实现toString方法 63

6.4 检查先决条件 63

6.5 添加字段 64

6.6 自指向 65

6.7 辅助构造器 65

6.8 私有字段和方法 66

6.9 定义操作符 67

6.10 Scala的标识符 68

6.11 方法重载 70

6.12 隐式转换 71

6.13 一番告诫 72

6.14 小结 72

第7章 内建控制结构 73

7.1 If表达式 73

7.2 While循环 74

7.3 for表达式 76

7.4 使用try表达式处理异常 80

7.5 匹配(match)表达式 82

7.6 不再使用break和continue 83

7.7 变量范围 84

7.8 重构指令式风格的代码 87

7.9 小结 88

第8章 函数和闭包 89

8.1 方法 89

8.2 本地函数 90

8.3 头等函数 91

8.4 函数字面量的短格式 93

8.5 占位符语法 93

8.6 部分应用函数 94

8.7 闭包 96

8.8 重复参数 98

8.9 尾递归 99

8.10 小结 102

第9章 控制抽象 103

9.1 减少代码重复 103

9.2 简化客户代码 106

9.3 柯里化(currying) 107

9.4 编写新的控制结构 108

9.5 传名参数(by-name parameter) 110

9.6 小结 112

第10章 组合与继承 113

10.1 二维布局库 113

10.2 抽象类 114

10.3 定义无参数方法 114

10.4 扩展类 116

10.5 重写方法和字段 117

10.6 定义参数化字段 118

10.7 调用超类构造器 119

10.8 使用override修饰符 120

10.9 多态和动态绑定 121

10.10 定义final成员 123

10.11 使用组合与继承 124

10.12 实现above、beside和toString 124

10.13 定义工厂对象 126

10.14 变高变宽 128

10.15 把代码都放在一起 129

10.16 小结 130

第11章 Scala的层级 131

11.1 Scala的类层级 131

11.2 原始类型是如何实现的 134

11.3 底层类型 135

11.4 小结 136

第12章 特质 137

12.1 特质是如何工作的 137

12.2 瘦接口对阵胖接口 139

12.3 样例:长方形对象 140

12.4 Ordered特质 141

12.5 特质用来做可堆叠的改变 143

12.6 为什么不是多重继承? 146

12.7 特质,用还是不用? 148

12.8 小结 149

第13章 包和引用 151

13.1 包 151

13.2 引用 153

13.3 隐式引用 156

13.4 访问修饰符 156

13.5 小结 160

第14章 断言和单元测试 161

14.1 断言 161

14.2 Scala里的单元测试 162

14.3 翔实的失败报告 163

14.4 使用JUnit和TestNG 164

14.5 规格测试 166

14.6 基于属性的测试 167

14.7 组织和运行测试 168

14.8 小结 170

第15章 样本类和模式匹配 171

15.1 简单例子 171

15.2 模式的种类 174

15.3 模式守卫 180

15.4 模式重叠 181

15.5 封闭类 182

15.6 Option类型 183

15.7 模式无处不在 184

15.8 一个更大的例子 187

15.9 小结 192

第16章 使用列表 193

16.1 列表字面量 193

16.2 List类型 193

16.3 构造列表 194

16.4 列表的基本操作 194

16.5 列表模式 195

16.6 List类的一阶方法 196

16.7 List类的高阶方法 204

16.8 List对象的方法 210

16.9 了解Scala的类型推断算法 212

16.10 小结 214

第17章 集合类型 215

17.1 集合库概览 215

17.2 序列 216

17.3 集(Set)和映射(Map) 220

17.4 可变(mutable)集合vs.不可变(immutable)集合 227

17.5 初始化集合 229

17.6 元组 231

17.7 小结 232

第18章 有状态的对象 233

18.1 什么让对象具有状态? 233

18.2 可重新赋值的变量和属性 234

18.3 案例研究:离散事件模拟 237

18.4 为数字电路定制的语言 237

18.5 Simulation API 239

18.6 电路模拟 242

18.7 小结 247

第19章 类型参数化 249

19.1 queues函数式队列 249

19.2 信息隐藏 251

19.3 变化型注解 253

19.4 检查变化型注解 256

19.5 下界 258

19.6 逆变 259

19.7 对象私有数据 261

19.8 上界 263

19.9 小结 264

第20章 抽象成员 265

20.1 抽象成员的快速浏览 265

20.2 类型成员 266

20.3 抽象val 266

20.4 抽象var 267

20.5 初始化抽象val 267

20.6 抽象类型 273

20.7 路径依赖类型 274

20.8 枚举 276

20.9 案例研究:货币 277

20.10 小结 284

第21章 隐式转换和参数 285

21.1 隐式转换 285

21.2 隐式操作规则 287

21.3 隐式转换为期望类型 289

21.4 转换(方法调用的)接收者 290

21.5 隐式参数 292

21.6 视界 296

21.7 隐式操作调试 297

21.8 小结 299

第22章 实现列表 301

22.1 List类原理 301

22.2 ListBuffer类 305

22.3 实际的List类 306

22.4 外在的函数式(风格) 308

22.5 小结 308

第23章 重访For表达式 309

23.1 For表达式 310

23.2 皇后问题 311

23.3 使用for表达式做查询 313

23.4 for表达式的转译 314

23.5 反其道而行之 317

23.6 泛化的for 318

23.7 小结 319

第24章 抽取器(Extractors) 321

24.1 例子:抽取email地址 321

24.2 抽取器 322

24.3 0或1个变量的模式 324

24.4 变参抽取器 325

24.5 抽取器和序列模式 327

24.6 抽取器VS.样本类 327

24.7 正则表达式 328

24.8 小结 330

第25章 注解 331

25.1 为什么要有注解? 331

25.2 注解语法 332

25.3 标准注解 333

25.4 小结 334

第26章 使用XML 335

26.1 半结构化数据 335

26.2 XML概览 335

26.3 XML字面量 336

26.4 序列化 338

26.5 拆解XML 339

26.6 反序列化 340

26.7 加载和保存 341

26.8 XML的模式匹配 342

26.9 小结 344

第27章 使用对象的模块化编程 345

27.1 问题 345

27.2 食谱应用 346

27.3 抽象概念 348

27.4 把模块拆分为特质 350

27.5 运行期链接 352

27.6 跟踪模块实例 353

27.7 小结 354

第28章 对象相等性 355

28.1 Scala中的相等性 355

28.2 编写相等性方法 355

28.3 定义带参数类型的相等性 365

28.4 equals和hashCode的制作方法 368

28.5 小结 371

第29章 结合Scala和Java 373

29.1 在Java中使用Scala 373

29.2 注解 375

29.3 存在类型 379

29.4 小结 381

第30章 Actor和并发 383

30.1 天堂中的烦恼 383

30.2 actor和消息传递 384

30.3 将原生线程当作actor 387

30.4 通过重用线程获得更好的性能 387

30.5 良好的actor风格 389

30.6 更长一些的示例:并行离散事件模拟 394

30.7 小结 406

第31章 连结符解析 407

31.1 示例:算术表达式 408

31.2 运行你的解析器 409

31.3 基本的正则表达式解析器 410

31.4 另一个示例:JSON 410

31.5 解析器输出 412

31.6 实现连结符解析器 416

31.7 字符串字面量和正则表达式 421

31.8 词法分析和解析 422

31.9 错误报告 423

31.10 回溯vs. LL(1) 424

31.11 小结 425

第32章 GUI编程 427

32.1 第一个Swing应用 427

32.2 面板和布局 429

32.3 处理事件 430

32.4 示例:摄氏/华氏温度转换器 432

32.5 小结 434

第33章 Scell试算表 435

33.1 可视化框架 435

33.2 将数据录入和显示分开 437

33.3 公式 439

33.4 解析公式 440

33.5 求值 444

33.6 操作库 446

33.7 修改传达 448

33.8 小结 451

附录A Unix和Windows的Scala脚本 453

术语表 455

参考文献 465

关于作者 467

索引 469

......(更多)

读书文摘

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

......(更多)

猜你喜欢

点击查看