Scala编程实战(原书第2版)
Alvin Alexander
陈凯, 李国斌, 李力, 黄新星 译
出版时间:2023年09月
页数:710
“本书包含大量用于解决Scala 3中典型编程问题的代码示例,是通过示例学习如何设计Scala程序的经典著作。如果你只能有一本Scala 3编程书,那非它莫属。”
——Julien Richard-Foy
Scala Center教育总监

在构建面向对象、函数式和并发的应用程序时,使用Scala既可以节省时间又能省去很多麻烦。本书包含250多个常见的Scala编程问题和1000多个基于真实场景的代码示例,可以帮助你解决在使用Scala 3及其流行库时遇到的常见问题。
Scala改变编程思维。无论你是从事Web、大数据还是分布式应用程序方面的工作,无论你是有经验的Scala开发人员还是刚刚学习使用这种JVM语言的程序员,本书都将让你受益良多。AlvinAlexander根据他在基于组件的、支持并发和分布式的高度可扩展应用程序中使用Scala的经验,提供了很多实用的解决方案。
通过学习本书,你将掌握:
● 字符串、数值和控制结构。
● 类、方法、对象、特质、打包和导入。
● 函数式编程技术。
● Scala丰富的集合、类和方法。
● 使用sbt构建和发布Scala应用程序。
● 使用Scala Future和Akka Typed实现actor和并发性。
● 流行的库,包括Spark、Scala.js、Play框架和GraalVM。
● 类型,例如型变、given、交集和并集。
● 最佳实践,包括模式匹配、模块和函数式错误处理。

  1. 前言
  2. 第1章 命令行
  3. 1.1 初识Scala REPL
  4. 1.2 在REPL中使用源代码和JAR文件
  5. 1.3 初识Ammonite REPL
  6. 1.4 scalac和scala命令
  7. 1.5 反编译Scala代码
  8. 1.6 运行JAR文件
  9. 第2章 字符串
  10. 2.1 字符串的相等性判断
  11. 2.2 多行字符串的创建
  12. 2.3 字符串的分割
  13. 2.4 字符串的变量代入
  14. 2.5 字符串输出的格式化
  15. 2.6 字符串的逐个字符处理
  16. 2.7 字符串的模式查找
  17. 2.8 字符串的模式替换
  18. 2.9 使用模式匹配提取字符串
  19. 2.10 访问字符串中的单个字符
  20. 2.11 自定义字符串插值器
  21. 2.12 创建随机字符串
  22. 第3章 数值和日期
  23. 3.1 将字符串解析为数值
  24. 3.2 数值类型间的转换
  25. 3.3 覆盖默认的数值类型
  26. 3.4 ++和--的替代方案
  27. 3.5 浮点数的比较
  28. 3.6 处理大数值
  29. 3.7 生成随机数
  30. 3.8 数值和货币的格式化
  31. 3.9 创建新的日期和时间实例
  32. 3.10 计算日期的差值
  33. 3.11 日期的格式化
  34. 3.12 将字符串解析为日期
  35. 第4章 控制结构
  36. 4.1 for 循环
  37. 4.2 多重for循环
  38. 4.3 for循环中的守卫语句
  39. 4.4 集合中的for/yield
  40. 4.5 Scala中的“三元操作符”
  41. 4.6 match表达式
  42. 4.7 case的多条件匹配
  43. 4.8 将match表达式的结果分配给变量
  44. 4.9 访问match表达式的默认值
  45. 4.10 match表达式与模式匹配
  46. 4.11 match表达式与枚举和样例类
  47. 4.12 case中的守卫语句
  48. 4.13 match表达式与isInstanceOf
  49. 4.14 match表达式与List
  50. 4.15 用try/catch匹配一个或多个异常
  51. 4.16 try/catch/finally
  52. 4.17 创建自定义控制结构
  53. 第5章 类
  54. 5.1 挑选合适的领域建模工具
  55. 5.2 创建主构造函数
  56. 5.3 控制构造函数字段的可见性
  57. 5.4 定义辅助构造函数
  58. 5.5 定义私有的主构造函数
  59. 5.6 构造函数参数的默认值
  60. 5.7 类继承时的构造函数
  61. 5.8 调用父类的构造函数
  62. 5.9 定义equals方法(对象相等性)
  63. 5.10 阻止生成访问方法和修改方法
  64. 5.11 覆盖默认的访问方法和修改方法
  65. 5.12 将代码块或函数赋值给惰性字段
  66. 5.13 设置未初始化的var字段
  67. 5.14 样例类产生的模板代码
  68. 5.15 定义样例类的辅助构造函数
  69. 第6章 特质和枚举
  70. 6.1 特质的接口用法
  71. 6.2 定义特质的抽象字段
  72. 6.3 特质的抽象类用法
  73. 6.4 特质的混入用法
  74. 6.5 多特质同名方法处理与super关键字
  75. 6.6 限制特质的拓展(仅支持特定类型的子类)
  76. 6.7 限制特质的拓展(仅支持具有特定方法的类型)
  77. 6.8 限制特质的拓展(仅支持特定的类)
  78. 6.9 使用参数化特质
  79. 6.10 特质的构造参数
  80. 6.11 特质与模块
  81. 6.12 用枚举创建命名值的集
  82. 6.13 用枚举建模ADT
  83. 第7章 对象
  84. 7.1 对象的强制转换
  85. 7.2 用classOf方法传递Class类型
  86. 7.3 用object创建单例对象
  87. 7.4 用伴生对象创建静态成员
  88. 7.5 用apply方法作为构造函数
  89. 7.6 用apply方法实现静态工厂
  90. 7.7 将特质具体化成对象
  91. 7.8 unapply方法与模式匹配
  92. 第8章 方法
  93. 8.1 控制方法的作用域
  94. 8.2 调用父类或特质的方法
  95. 8.3 调用方法时使用参数名称
  96. 8.4 设置参数的默认值
  97. 8.5 可变参数
  98. 8.6 无括号的方法调用
  99. 8.7 声明异常
  100. 8.8 支持链式调用风格
  101. 8.9 扩展方法
  102. 第9章 包和导入
  103. 9.1 大括号风格的包语法
  104. 9.2 导入一个或多个成员
  105. 9.3 导入并重命名成员
  106. 9.4 导入时隐藏类
  107. 9.5 导入静态成员
  108. 9.6 无处不在的导入语句
  109. 9.7 导入given
  110. 第10章 函数式编程
  111. 10.1 使用函数字面量(匿名函数)
  112. 10.2 将函数作为变量传递
  113. 10.3 将函数作为方法的参数
  114. 10.4 声明高阶函数
  115. 10.5 使用部分应用函数
  116. 10.6 创建返回函数的方法
  117. 10.7 创建偏函数
  118. 10.8 实现函数式错误处理
  119. 10.9 实际案例:在算法中传递函数
  120. 10.10 实际案例:函数式领域建模
  121. 第11章 集合:介绍
  122. 11.1 选择合适的集合类
  123. 11.2 集合的性能对比
  124. 11.3 不可变集合与可变变量
  125. 11.4 创建惰性视图
  126. 第12章 集合:序列类
  127. 12.1 Vector
  128. 12.2 创建并填充List
  129. 12.3 List的添加操作
  130. 12.4 List和ListBuffer的删除操作
  131. 12.5 使用ListBuffer创建可变列表
  132. 12.6 LazyList
  133. 12.7 ArrayBuffer
  134. 12.8 Array和ArrayBuffer的删除操作
  135. 12.9 创建并更新数组
  136. 12.10 创建多维数组
  137. 12.11 数组排序
  138. 第13章 集合:常见的序列方法
  139. 13.1 选择合适的集合方法
  140. 13.2 foreach方法
  141. 13.3 迭代器
  142. 13.4 zipWithIndex和zip方法
  143. 13.5 map方法
  144. 13.6 flatten方法
  145. 13.7 filter方法
  146. 13.8 从集合中提取元素序列
  147. 13.9 序列的拆分
  148. 13.10 reduce和fold方法
  149. 13.11 序列的去重
  150. 13.12 序列的合并
  151. 13.13 序列的随机化
  152. 13.14 集合排序
  153. 13.15 mkString和addString方法
  154. 第14章 集合:映射
  155. 14.1 创建和使用映射
  156. 14.2 选择合适的映射
  157. 14.3 不可变映射的添加、更新和删除操作
  158. 14.4 可变映射的添加、更新和删除操作
  159. 14.5 安全访问映射值
  160. 14.6 测试映射中键或值的存在
  161. 14.7 从映射中获取所有的键或值
  162. 14.8 寻找映射中最大和最小的键或值
  163. 14.9 映射的遍历
  164. 14.10 根据键或值对映射排序
  165. 14.11 映射的过滤
  166. 第15章 集合:元组、范围、集、栈和队列
  167. 15.1 元组与异构列表
  168. 15.2 创建范围
  169. 15.3 创建集并向其添加元素
  170. 15.4 集的删除操作
  171. 15.5 有序集
  172. 15.6 创建和使用栈
  173. 15.7 创建和使用队列
  174. 第16章 文件和进程
  175. 16.1 文本文件的读取
  176. 16.2 文本文件的写入
  177. 16.3 二进制文件的读写
  178. 16.4 将字符串伪装为文件
  179. 16.5 对象和文件间的序列化/反序列化
  180. 16.6 目录的遍历
  181. 16.7 执行外部命令
  182. 16.8 执行外部命令并读取标准输出
  183. 16.9 命令的标准输出和标准错误输出
  184. 16.10 构建外部命令的管道
  185. 第17章 sbt
  186. 17.1 新建sbt项目
  187. 17.2 用sbt命令构建项目
  188. 17.3 了解build.sbt 语法风格
  189. 17.4 编译、运行和打包Scala项目
  190. 17.5 其他sbt命令
  191. 17.6 持续的编译和测试
  192. 17.7 依赖管理
  193. 17.8 托管依赖的版本控制
  194. 17.9 API文档的生成
  195. 17.10 指定sbt运行的mainClass
  196. 17.11 部署一个可执行的JAR文件
  197. 17.12 发布类库
  198. 第18章 Scala Future和Akka actor的并发
  199. 18.1 创建Future
  200. 18.2 Future的回调和转换方法
  201. 18.3 返回Future的方法
  202. 18.4 多个Future的并行执行
  203. 18.5 创建面向对象风格的actor
  204. 18.6 创建函数式风格的actor
  205. 18.7 向actor发消息
  206. 18.8 创建有多种状态的actor
  207. 第19章 Play框架和Web服务
  208. 19.1 创建Play项目
  209. 19.2 创建Play的Web API
  210. 19.3 返回JSON的GET请求
  211. 19.4 将Scala对象序列化成JSON
  212. 19.5 将JSON反序列化成Scala对象
  213. 19.6 在非Play项目中使用Play JSON库
  214. 19.7 初识sttp
  215. 第20章 Apache Spark
  216. 20.1 初识Spark
  217. 20.2 将文件读入RDD
  218. 20.3 将CSV读入RDD
  219. 20.4 DataFrame
  220. 20.5 将数据文件读入DataFrame
  221. 20.6 针对多个文件的Spark SQL查询
  222. 20.7 Spark批处理程序
  223. 第21章 Scala.js、GraalVM和jpackage
  224. 21.1 初识Scala.js
  225. 21.2 使用Scala.js响应事件
  226. 21.3 使用Scala.js构建单页面应用
  227. 21.4 使用GraalVM构建原生的可执行文件
  228. 21.5 使用jpackage构建应用
  229. 第22章 Scala与Java集成
  230. 22.1 在Scala中使用Java的集合
  231. 22.2 在Java中使用Scala的集合
  232. 22.3 在Scala中使用Java的Optional值
  233. 22.4 在Java中使用Scala的Option值
  234. 22.5 在Java中使用Scala的特质
  235. 22.6 在Scala中使用Java的接口
  236. 22.7 @throws注解
  237. 22.8 @varargs注解
  238. 22.9 @SerialVersionUID和其他注解
  239. 第23章 类型
  240. 23.1 泛型方法
  241. 23.2 泛型类
  242. 23.3 不可变泛型参数的协变
  243. 23.4 元素类型可变化的类
  244. 23.5 类的泛型类型边界
  245. 23.6 duck类型(结构化类型)
  246. 23.7 不透明类型与类型名称
  247. 23.8 given和using的术语推断
  248. 23.9 并集类型与动态类型
  249. 23.10 类型的组合
  250. 23.11 通过跨界相等性比较类
  251. 23.12 CanEqual类型族
  252. 第24章 最佳实践
  253. 24.1 纯函数
  254. 24.2 不可变量与集合
  255. 24.3 表达式
  256. 24.4 match表达式与模式匹配
  257. 24.5 消除null值
  258. 24.6 Option、Try和Either
  259. 24.7 构建模块化系统
  260. 24.8 高阶函数与Option值
书名:Scala编程实战(原书第2版)
作者:Alvin Alexander
译者:陈凯, 李国斌, 李力, 黄新星 译
国内出版社:机械工业出版社
出版时间:2023年09月
页数:710
书号:978-7-111-73279-2
原版书书名:Scala Cookbook, Second Edition
原版书出版商:O'Reilly Media
Alvin Alexander
 
Alvin Alexander拥有美国得州农工大学航空航天工程学位,是Valley Programming软件咨询公司创始人。他精通Fort ran、C、UNIX、Linux、Perl、Java、Python、Ruby、Android、Scala、Haskell、Kotlin和Flutter。Alvin是Functional Programming, Simplified(Create Space)的作者,也是Scala网站官方文档Scala 3 Book的合著者。

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