Scala 编程实战

0
(0)

Scala 编程实战

作者:AlvinAlexander

出版社:机械工业出版社

原作名:ScalaCookbook

译者:马博文/张锦文/任晓君

出版年:2016-6-7

页数:642

定价:119

ISBN:9787111526865

内容简介
······

学习Scala语言,不仅仅意味着熟悉新的API,更重要的是一种思维方式的转变。从原有的面向对象编程(OO)到函数式编程(FP)的思想。本书面向实际的使用场景,提供了大量的Scala实例,同时,也给出底层的原理和相关的参考。对于Scala新手来说这是一本**不错的入门书,对于老手来说也是一本夯实基础,检视自己所学知识的好书。

作者简介
······

Alvin Alexander走上软件开发之路比较曲折。虽然他从得克萨斯州的A&M大学拿到了航空工程学学位,但他真正想做的却是打棒球。成为见习工程师时,他意识到自己喜欢软件开发和编程胜过航天工程。因此,他开始自学Fortran、C、UNIX和网络管理、sed、awk、Perl、Java、Python、Ruby、JRuby、Groovy、PHP和Scala。在这个过程中,他开了一家软件咨询公司,并发展到15名员工,后来公司被卖掉,几年之后,他移居阿拉斯加州。离开阿拉斯加州之后,他出版了两本书,(《我如何卖掉自己的业务:私人日记》和《咨询的禅和艺术 》)。他创建了DevDaily网站,每年都有百万级的浏览量,还创建了新的软件咨询公司Valley Programming以及一个名为Zen Foundation的非盈利性组织。

目录
······

前言………………………………….1

第1章字符串……….. 11

1.1 测试字符串的相等性…………………………….14

1.2 创建多个字符串………………………………….16

1.3 分隔字符串………………………………….17

1.4 字符串中的变量代换…………………………….19

1.5 挨个处理字符串中的字符………………………23

1.6 字符串中的查找模式…………………………….27

1.7 字符串中的替换模式…………………………….30

1.8 抽取String 中模式匹配的部分…………………31

1.9 访问字符串中的一个字符………………………33

1.10 在String 类中添加自定义的方法……………34

第2章数值…………..39

2.1 从字符串到数值………………………………….40

2.2 数值类型转换………………………………….44

2.3 重载默认数值类型………………………………..45

2.4 替代++ 和--………………………………….47

2.5 浮点数的比较………………………………….49

2.6 处理大数………………………………….51

2.7 生成随机数………………………………….53

2.8 创建一个数值区间、列表或者数组…………55

2.9 格式化数值和金额………………………………..57

第3章控制结构…….60

3.1 for 和foreach 循环………………………………….61

3.2 在for 循环中使用多个计数器………………….67

3.3 在for 循环中嵌入if 语句(卫语句)…………69

3.4 创建for 表达式(for/yield 组合)…………….70

3.5 实现break 和continue……………………………..72

3.6 像三元运算符一样使用if……………………….77

3.7 像switch 语句一样使用匹配表达式………….78

3.8 一条case 语句匹配多个条件……………………83

3.9 将匹配表达式的结果赋值给变量……………84

3.10 访问匹配表达式缺省case 的值………………84

3.11 在匹配表达式中使用模式匹配……………..85

3.12 在匹配表达式中使用Case 类………………..92

3.13 给Case 语句添加if 表达式(卫语句)…….93

3.14 使用匹配表达式替换isInstanceOf………….94

3.15 在匹配表达式中使用List……………………..95

3.16 用try/catch 匹配一个或者更多的异常……97

3.17 在try/catch/finally 块中使用变量前定义变量…………………….98

3.18 创建自定义控制结构…………………………100

第4章类和属性…..103

4.1 创建一个主构造函数…………………………..104

4.2 控制构造函数字段的可见性…………………108

4.3 定义辅助构造函数……………………………… 111

4.4 定义私有的主构造函数……………………….115

4.5 设置构造函数参数的默认值…………………116

4.6 覆写默认的访问和修改方法…………………118

4.7 阻止生成getter 和setter 方法………………….121

4.8 将代码块或者函数赋给字段…………………123

4.9 设置未初始化的var 字段类型………………..125

4.10 在继承类时处理构造函数参数……………127

4.11 调用父类的构造函数…………………………129

4.12 何时使用抽象类………………………………..131

4.13 在抽象基类(或者特质) 里定义属性……..133

4.14 用Case 类生成模板代码……………………..137

4.15 定义一个equals 方法(对象的相等性)..141

4.16 创建内部类………………………………….144

第5章方法…………147

5.1 控制方法作用域…………………………………148

5.2 调用父类的方法…………………………………152

5.3 方法参数默认值…………………………………154

5.4 使用参数名………………………………….157

5.5 定义一个返回多个值(Tuples) 的方法……..159

5.6 调用getter/setter 方法时不使用括号……….160

5.7 创建接受变参的方法…………………………..162

5.8 方法的异常声明………………………………..164

5.9 支持链式调用编码风格……………………….166解决办法…167

第6章对象…………170

6.1 对象的强制转换…………………………………171

6.2 Java.class 的Scala 等价类………………………173

6.3 确定对象所属的类………………………………174

6.4 用Object 启动一个应用………………………..175

6.5 用object 创建单例………………………………..177

6.6 用伴生类创建静态成员……………………….178

6.7 将通用代码放入包对象……………………….180

6.8 不使用new 关键字创建对象实例……………183

6.9 在Scala 中用apply 方法实现工厂方法……..187

第7章包和导入…..190

7.1 花括号风格的包记号法……………………….191

7.2 引入一个或多个成员…………………………..192

7.3 在导入时重命名成员…………………………..194

7.4 在引入时隐藏一个类…………………………..195

7.5 使用静态导入………………………………….196

7.6 在任意地方使用Import 语句………………….197

第8章特质…………200

8.1 特质用作接口………………………………….200

8.2 使用特质中的抽象字段和实际字段……….203

8.3 像抽象类一样使用特质……………………….204

8.4 简单混入特质………………………………….205

8.5 通过继承来限制特质的使用范围………….206

8.6 限定特质只可用于指定类型的子类……….208

8.7 保证特质只能被添加到只有一个特定方法的类型……………………..210

8.8 为对象实例中添加特质……………………….211

8.9 像特质一样继承一个Java 接口………………212

第9章函数式编程..214

9.1 使用函数字面量(匿名函数)……………..215

9.2 将函数作为变量…………………………………216

9.3 定义接受简单函数作为参数的方法……….220

9.4 更多复杂的函数…………………………………222

9.5 使用闭包………………………………….226

9.6 使用部分应用函数………………………………231

9.7 创建返回函数的函数…………………………..232

9.8 创建部分应用函数………………………………235

9.9 一个真实的例子…………………………………239

第10 章集合……….242

10.1 理解集合的层级结构…………………………243

10.2 选择一个集合类………………………………..247

10.3 用一个集合方法解决一个问题……………252

10.4 理解集合的性能………………………………..258

10.5 在创建集合时声明一个类型……………….260

10.6 理解可变变量与不可变集合……………….262

10.7 将Vector“变为”不可变序列…………….263

10.8 把ArrayBuffer 作为可变序列的第一选择265

10.9 用foreach 遍历一个集合……………………..267

10.10 用for 循环遍历一个集合……………………269

10.11 使用zipWithIndex 或者zip 创建循环计数器……………………272

10.12 迭代器的使用…………………………………275

10.13 用for/yield 实现集合间的转换……………276

10.14 用map 实现集合的变换…………………….279

10.15 展平列表的列表与扁平化问题………….281

10.16 map,flatten 和flatMap 的组合……………283

10.17 用filter 过滤一个集合………………………285

10.18 从集合中提取元素序列……………………287

10.19 序列的分割(groupBy 、partition 等)..289

10.20 用reduce 和fold 方法遍历集合……………291

10.21 从序列中提取不重复的元素…………….296

10.22 合并序列集合…………………………………297

10.23 用zip 将两个序列集合合并为一对………300

10.24 在集合上创建一个惰性视图……………..301

10.25 利用Range 创建集合…………………………305

10.26 创建使用枚举…………………………………307

10.27 当需要一堆元素时使用元组……………..308

10.28 集合排序………………………………….310

10.29 通过mkString 将集合转换成字符串……313

第11 章列表、数组、映射、集及其他……………………..315

11.1 创建和填充列表的不同方式……………….316

11.2 创建可变List………………………………….318

11.3 为List 添加元素…………………………………319

11.4 从List(或者ListBuffer)中删除元素…..321

11.5 合并或连接列表………………………………..323

11.6 使用List 的懒惰版本,Stream……………..324

11.7 创建和更新数组的不同方式……………….326

11.8 创建大小可变的数组(ArrayBuffer)….328

11.9 删除Array 和ArrayBuffer 的元素…………..329

11.10 数组排序………………………………….331

11.11 创建多维数组………………………………….332

11.12 创建映射………………………………….334

11.13 选择一种Map 实现……………………………336

11.14 为可变映射添加、更新或删除元素……338

11.15 为不可变映射添加、更新或删除元素..340

11.16 访问映射的值………………………………….342

11.17 遍历映射………………………………….344

11.18 从映射中获得所有的键或者值………….345

11.19 反转键值………………………………….346

11.20 测试映射中键/值的存在……………………347

11.21 过滤映射………………………………….348

11.22 根据键或者值对映射排序…………………350

11.23 找到映射中最大的键或者值……………..354

11.24 给集添加元素………………………………….355

11.25 从集中删除元素………………………………357

11.26 使用可排序集………………………………….359

11.27 使用队列………………………………….360

11.28 使用栈………………………………….362

11.29 使用Range………………………………….365

第12 章文件和进程367

12.1 如何打开和读取文本文件…………………..367

12.2 写入文本文件………………………………….373

12.3 读写二进制文件………………………………..374

12.4 如何处理文本文件中的每个字符………..375

12.5 如何处理CSV 文件……………………………376

12.6 将字符串伪装为文件…………………………379

12.7 使用序列化………………………………….381

12.8 列出目录中的文件……………………………382

12.9 列举目录之下的子目录……………………..384

12.10 执行外部命令…………………………………385

12.11 执行外部命令并使用标准输出………….388

12.12 处理外部命令的标准输出和标准错误输出……………………….390

12.13 构建命令管道…………………………………392

12.14 重定向外部命令的标准输出和标准输入……………………………393

12.15 在进程中使用AND(&&)和OR(||)395

12.16 外部命令中处理通配符……………………396

12.17 如何在不同目录下运行进程……………..397

12.18 在运行命令时设置环境变量……………..398

12.19 执行外部命令的方法索引………………..399

第13 章Actors 和并发………………………………….401

13.1 Actor 简单入门………………………………….403

13.2 创建构造函数有参数的actor……………….407

13.3 Actor 之间如何通信……………………………409

13.4 理解Akka Actor 生命周期方法…………….411

13.5 启动Actor ………………………………….414

13.6 停止Actors………………………………….416

13.7 关闭Akka Actor 系统………………………….421

13.8 用watch 监控Actor 的死亡…………………..422

13.9 Futures 的简单并发……………………………425

13.10 给Actor 发消息并等待回复……………….433

13.11 用become 切换不同状态……………………434

13.12 使用并发集合…………………………………436

第14 章命令行任务440

14.1 Scala REPL 初体验…………………………….441

14.2 往REPL 中粘贴和加载代码块……………..445

14.3 在REPL 的Classpath 中添加JAR 文件和类………………………….448

14.4 在REPL 中运行Shell 命令……………………449

14.5 用scalac 命令编译,scala 命令运行………451

14.6 反汇编和反编译Scala 代码………………….452

14.7 寻找Scala 类库………………………………….457

14.8 用scaladoc 生成文档…………………………..458

14.9 更快的命令行编译器fsc……………………..463

14.10 将Scala 作为脚本语言使用………………..464

14.11 通过脚本访问命令行参数…………………468

14.12 在Scala shell 脚本中输入提示……………469

14.13 让Scala 脚本运行得更快……………………473

第15 章Web 服务…475

15.1 从Scala 对象中创建JSON 字符串………….475

15.2 从包含集合的类中生成JSON 字符串……479

15.3 从JSON 字符串生成简单Scala 对象………484

15.4 将JSON 数据解析成为对象的数组……….485

15.5 用Scalatra 创建Web 服务……………………..487

15.6 用Scalatra 挂载替换XML Servlet 映射…..490

15.7 访问Scalatra Web 服务的GET 参数……….492

15.8 用Scalatra 处理POST 请求数据…………….494

15.9 创建一个简单的GET 请求客户端…………497

15.10 向POST 链接发送JSON 数据……………..501

15.11 获取URL Headers ……………………………502

15.12 发送请求时设置链接的Headers…………503

15.13 用Play 框架创建一个GET 请求的Web 服务……………………..504

15.14 向Play 框架的web 服务POST JSON 数据507

第16 章数据库和持久化………………………………….510

16.1 用JDBC 连接MySQL………………………….511

16.2 用Spring Framework 连接数据库…………513

16.3 连接MongoDB 并且插入数据………………516

16.4 用insert,save 或者+= 把文档插入到MongoDB …………………..519

16.5 搜索一个MongoDB 集合…………………….521

16.6 更新MongoDB 集合中的文档………………525

16.7 获取MongoDB 文档ID………………………..526

16.8 删除MongoDB 集合中的文档………………527

16.9 快速浏览Slick………………………………….529

第17 章与Java 交互………………………………….531

17.1 与Java 集合的转换…………………………….531

17.2 给Scala 方法添加异常注解以便与Java 交互……………………536

17.3 使用@SerialVersionUID 和其他注解…….538

17.4 使用Spring 框架………………………………..539

17.5 注解变长参数方法…………………………….542

17.6 当Java 的代码需要JavaBeans ………………543

17.7 包装特质的实现………………………………..547

第18 章简单构建工具(SBT)………………………………551

18.1 用SBT 创建一个项目目录结构…………….551

18.2 用SBT 编译、运行和打包一个Scala 项目555

18.3 用SBT 和ScalaTest 运行测试………………..560

18.4 用SBT 管理依赖………………………………..562

18.5 控制所使用的可管理依赖的版本………..565

18.6 创建有子项目的项目…………………………567

18.7 在Eclipse 中使用SBT………………………….569

18.8 生成项目API 文档……………………………..571

18.9 指定一个Main 类运行…………………………572

18.10 使用GitHub 项目作为项目依赖………….574

18.11 告诉SBT 如何找到一个仓库(使用Resolvers)……………………575

18.12 通过SBT 堆栈跟踪解决问题………………576

18.13 设置SBT 日志等级…………………………..577

18.14 部署一个单独的、可执行的JAR 文件…578

18.15 发布类库………………………………….581

18.16 用Build.scala 取代build.sbt………………..582

18.17 在SBT 中使用Maven 仓库的类库………..584

18.18 用Ant 构建Scala 项目………………………..586

第19 章类型……….589

19.1 创建使用泛型的类…………………………….591

19.2 创建一个接收简单泛型的方法……………595

19.3 使用鸭子类型(结构化类型)……………596

19.4 让可变集合非变………………………………..598

19.5 让不可变集合协变…………………………….600

19.6 创建所有元素都是基本类型的集合……..602

19.7 给封闭模型选择性添加新行为……………605

19.8 用类型构建功能………………………………..608

第20 章惯用法…….612

20.1 创建没有副作用的方法(纯函数)……..613

20.2 选择不可变对象………………………………..620

20.3 思考“面向表达式编程”…………………..624

20.4 使用匹配表达式和模式匹配……………….627

20.5 从代码中根除null 值…………………………..630

20.6 使用Option/Some/None 模式………………634

评论 ······

比较啰嗦,讲原理偏少,适合入门

读了一半,现在工作用的是python,搁置了。

我的 Scala 第一本入门书,太棒了。
刚入门建议系统的翻阅一遍,知道书本的大致内容,了解 Scala 的框架,集合,模式匹配等。 熟悉了之后也可以把这本书当做手册来翻。
非常喜欢这本书的一点是,它是由一个个问题组成的,这个实战性就非常强,编程就需要这样的一本书。 力荐。

比较简单,以实践内容为主,可当作入门书籍。

点击星号评分!

平均分 0 / 5. 投票数: 0

还没有投票!请为他投一票。

评论 抢沙发

评论前必须登录!

 

登录

找回密码

注册