计算机
类型
9.3
豆瓣评分
可以朗读
语音朗读
507千字
字数
2018-01-01
发行日期
展开全部
主编推荐语
一线开发者编写,全面掌握Scala核心特性,提升编程技巧。
内容简介
本书由直接参与Scala开发的一线人员编写,因而对原理的解读和应用的把握更加值得信赖。本书面向具有一定编程经验的开发者,目标是让读者能够全面了解和掌握Scala编程语言的核心特性,并能够深入理解Scala这门语言在设计取舍背后的动因。即便是不直接使用Scala或从事一线编程工作的读者,也能从本书学到大量关于函数式和面向对象的编程概念和技巧。
目录
- 版权信息
- 内容简介
- 对早前版本《Scala编程》的赞许
- 推荐序
- 译者序
- 序
- 致谢
- 引言
- 第1章 一门可伸缩的语言
- 1.1 一门按需伸缩的语言
- 培育新类型
- 培育新的控制结构
- 1.2 是什么让Scala能屈能伸?
- Scala是面向对象的
- Scala是函数式的
- 1.3 为什么要用Scala?
- Scala是兼容的
- Scala是精简的
- Scala是高级的
- Scala是静态类型的
- 1.4 Scala寻根
- 1.5 结语
- 第2章 Scala入门
- 第1步 使用Scala解释器
- 第2步 定义变量
- 第3步 定义函数
- 第4步 编写Scala脚本
- 第5步 用while做循环;用if做判断
- 第6步 用foreach和for遍历
- 结语
- 第3章 Scala入门(续)
- 第7步 用类型参数化数组
- 第8步 使用列表
- 为什么不在列表末尾追加元素?
- 第9步 使用元组
- 访问元组中的元素
- 第10步 使用集和映射
- 第11步 识别函数式编程风格
- Scala程序员的平衡心态
- 第12步 从文件读取文本行
- 结语
- 第4章 类和对象
- 4.1 类、字段和方法
- 4.2 分号推断
- 分号推断的规则
- 4.3 单例对象
- 4.4 Scala应用程序
- 4.5 App特质
- 4.6 结语
- 第5章 基础类型和操作
- 5.1 一些基础类型
- 5.2 字面量
- Java程序员的快速通道
- 整数字面量
- 浮点数字面量
- 字符字面量
- 字符串字面量
- 符号字面量
- 布尔值字面量
- 5.3 字符串插值
- 5.4 操作符即方法
- 任何方法都可以是操作符
- Java程序员的快速通道
- 5.5 算术操作
- 5.6 关系和逻辑操作
- 5.7 位运算操作
- 5.8 对象相等性
- Scala的==跟Java的不同
- 5.9 操作符优先级和结合性
- 5.10 富包装类
- 5.11 结语
- 第6章 函数式对象
- 6.1 Rational类的规格定义
- 6.2 构建Rational
- 不可变对象的设计取舍
- 6.3 重新实现toString方法
- 6.4 检查前置条件
- 6.5 添加字段
- 6.6 自引用
- 6.7 辅助构造方法
- 6.8 私有字段和方法
- 6.9 定义操作符
- 6.10 Scala中的标识符
- 6.11 方法重载
- 6.12 隐式转换
- 6.13 注意事项
- 6.14 结语
- 第7章 内建的控制结构
- 7.1 if表达式
- 7.2 while循环
- 7.3 for表达式
- 遍历集合
- 过滤
- 嵌套迭代
- 中途(mid-stream)变量绑定
- 产出一个新的集合
- 7.4 用try表达式实现异常处理
- 抛出异常
- 捕获异常
- finally子句
- 交出值
- 7.5 match表达式
- 7.6 没有break和continue的日子
- 7.7 变量作用域
- Java程序员的快速通道
- 7.8 对指令式代码进行重构
- 7.9 结语
- 第8章 函数和闭包
- 8.1 方法
- 8.2 局部函数
- 8.3 一等函数
- 8.4 函数字面量的简写形式
- 8.5 占位符语法
- 8.6 部分应用的函数
- 8.7 闭包
- 为什么要多这么一个下画线?
- 8.8 特殊的函数调用形式
- 重复参数
- 带名字的参数
- 缺省参数值
- 8.9 尾递归
- 跟踪尾递归函数
- 尾递归优化
- 尾递归的局限
- 8.10 结语
- 第9章 控制抽象
- 9.1 减少代码重复
- 9.2 简化调用方代码
- 9.3 柯里化
- 9.4 编写新的控制结构
- 9.5 传名参数
- 9.6 结语
- 第10章 组合和继承
- 10.1 一个二维的布局类库
- 10.2 抽象类
- 10.3 定义无参方法
- 10.4 扩展类
- 10.5 重写方法和字段
- 10.6 定义参数化字段
- 10.7 调用超类构造方法
- 10.8 使用override修饰符
- 10.9 多态和动态绑定
- 10.10 声明final成员
- 10.11 使用组合和继承
- 10.12 实现above、beside和toString
- 10.13 定义工厂对象
- 10.14 增高和增宽
- 10.15 放在一起
- 10.16 结语
- 第11章 Scala的继承关系
- 11.1 Scala的类继承关系
- 11.2 基本类型的实现机制
- 11.3 底类型(bottom types)
- 11.4 定义自己的值类型
- 避免类型单一化
- 11.5 结语
- 第12章 特质
- 12.1 特质如何工作
- 12.2 瘦接口和富接口
- 12.3 示例:矩形对象
- 12.4 Ordered特质
- 12.5 作为可叠加修改的特质
- 12.6 为什么不用多重继承?
- 12.7 要特质还是不要特质?
- 12.8 结语
- 第13章 包和引入
- 13.1 将代码放进包里
- 13.2 对相关代码的精简访问
- 13.3 引入
- Scala的灵活引入
- 13.4 隐式引入
- 13.5 访问修饰符
- 私有成员
- 受保护成员
- 公共成员
- 保护的范围
- 可见性和伴生对象
- 13.6 包对象
- 13.7 结语
- 第14章 断言和测试
- 14.1 断言
- 14.2 用Scala写测试
- 14.3 翔实的失败报告
- 14.4 作为规格说明的测试
- 14.5 基于性质的测试
- 14.6 组织和运行测试
- 14.7 结语
- 第15章 样例类和模式匹配
- 15.1 一个简单的例子
- 样例类
- 模式匹配
- 对比match和switch
- 15.2 模式的种类
- 通配模式
- 常量模式
- 变量模式
- 构造方法模式
- 序列模式
- 元组模式
- 带类型的模式
- 变量绑定
- 15.3 模式守卫
- 15.4 模式重叠
- 15.5 密封类
- 15.6 Option类型
- 15.7 到处都是模式
- 变量定义中的模式
- 作为偏函数的case序列
- for表达式中的模式
- 15.8 一个复杂的例子
- 15.9 结语
- 第16章 使用列表
- 16.1 List字面量
- 16.2 List类型
- 16.3 构建列表
- 16.4 列表的基本操作
- 16.5 列表模式
- 关于List的模式匹配
- 16.6 List类的初阶方法
- 拼接两个列表
- 分治(Divide and Conquer)原则
- 获取列表的长度:length
- 访问列表的末端:init和last
- 反转列表:reverse
- 前缀和后缀:drop、take和splitAt
- 元素选择:apply和indices
- 扁平化列表的列表:flatten
- 将列表zip起来:zip和unzip
- 显示列表:toString和mkString
- 转换列表:iterator、toArray、copyToArray
- 例子:归并排序
- 快速通道
- 16.7 List类的高阶方法
- 对列表作映射:map、flatMap和foreach
- 过滤列表:filter、partition、find、takeWhile、dropWhile和span
- 对列表的前提条件检查:forall和exists
- 折叠列表:/:和:\
- 例子:用fold反转列表
- 列表排序:sortWith
- 16.8 List对象的方法
- 从元素创建列表:List.apply
- 创建数值区间:List.range
- 创建相同元素的列表:List.fill
- 表格化一个函数:List.tabulate
- 拼接多个列表:List.concat
- 16.9 同时处理多个列表
- 快速通道
- 16.10 理解Scala的类型推断算法
- 16.11 结语
- 第17章 使用其他集合类
- 17.1 序列
- 列表
- 数组
- 列表缓冲(list buffer)
- 数组缓冲
- 字符串(通过StringOps)
- 17.2 集和映射
- 使用集
- 使用映射
- 默认的集和映射
- 排好序的集和映射
- 17.3 在可变和不可变集合类之间选择
- 17.4 初始化集合
- 转换成数组或列表
- 在可变和不可变集及映射间转换
- 17.5 元组
- 17.6 结语
- 第18章 可变对象
- 18.1 什么样的对象是可变的?
- 18.2 可被重新赋值的变量和属性
- 18.3 案例分析:离散事件模拟
- 快速通道
- 18.4 用于描述数字电路的语言
- 18.5 Simulation API
- 18.6 电路模拟
- Wire类
- inverter方法
- andGate和orGate方法
- 模拟输出
- 运行模拟器
- 18.7 结语
- 第19章 类型参数化
- 19.1 函数式队列
- 19.2 信息隐藏
- 私有构造方法和工厂方法
- 备选方案:私有类
- 19.3 型变注解
- 型变和数组
- 19.4 检查型变注解
- 快速通道
- 19.5 下界
- 19.6 逆变
- 19.7 对象私有数据
- 19.8 上界
- 19.9 结语
- 第20章 抽象成员
- 20.1 抽象成员概览
- 20.2 类型成员
- 20.3 抽象的val
- 20.4 抽象的var
- 20.5 初始化抽象的val
- 预初始化字段
- 惰性的val
- 惰性函数式编程语言
- 20.6 抽象类型
- 20.7 路径依赖类型
- 20.8 改良类型
- 20.9 枚举
- 20.10 案例分析:货币
- 20.11 结语
- 第21章 隐式转换和隐式参数
- 21.1 隐式转换
- 21.2 隐式规则
- 命名一个隐式转换
- 在哪些地方会尝试隐式转换
- 21.3 隐式转换到一个预期的类型
- 21.4 转换接收端
- 与新类型互操作
- 模拟新的语法
- 隐式类
- 21.5 隐式参数
- 隐式参数的代码风格规则
- 21.6 上下文界定
- 21.7 当有多个转换可选时
- 21.8 调试
- 21.9 结语
- 第22章 实现列表
- 22.1 List类的原理
- Nil对象
- ::类
- 更多方法
- List的构造
- 22.2 ListBuffer类
- 22.3 List类的实践
- 22.4 外部可见的函数式
- 22.5 结语
- 第23章 重访for表达式
- 23.1 for表达式
- 23.2 N皇后问题
- 23.3 用for推导式进行查询
- 23.4 用for推导式进行翻译
- 翻译单个生成器的for表达式
- 翻译以一个生成器和一个过滤器开始的for表达式
- 翻译以两个生成器开始的for表达式
- 翻译生成器中的模式
- 翻译(for表达式中的)定义
- 翻译for循环
- 23.5 反过来
- 23.6 泛化for表达式
- 23.7 结语
- 第24章 深入集合类
- 24.1 可变和不可变集合
- 24.2 集合的一致性
- 24.3 Traversable特质
- 添加
- 映射操作
- 转换
- 拷贝操作
- 大小操作
- 元素获取操作
- 子集合获取操作
- 细分
- 元素测试
- 折叠
- 特殊折叠
- 字符串操作
- 视图操作
- 24.4 Iterable特质
- 为什么要同时有Traversable和Iterable?
- 24.5 序列型特质Seq、IndexedSeq和LinearSeq
- 下标和长度操作
- 下标检索操作
- 添加操作
- 更新操作
- 排序操作
- 反转操作
- 比较操作
- 多重集操作
- 缓冲
- 24.6 集
- 测试
- 添加
- 移除
- 集操作
- 24.7 映射
- 查找
- 添加和更新
- 移除
- 产生子集合
- 变换
- 24.8 具体的不可变集合类
- 列表
- 流
- 向量
- 不可变的栈
- 不可变的队列
- 区间
- 哈希字典树
- 红黑树
- 不可变的位组
- 列表映射
- 24.9 具体的可变集合类
- 数组缓冲
- 列表缓冲
- 字符串构建器
- 链表
- 双向链表
- 可变列表
- 队列
- 数组序列
- 栈
- 数组栈
- 哈希表
- 弱哈希映射
- 并发映射
- 可变位组
- 24.10 数组
- 24.11 字符串
- 24.12 性能特征
- 24.13 相等性
- 24.14 视图
- 24.15 迭代器
- 带缓冲的迭代器
- 24.16 从头创建集合
- 24.17 Java和Scala集合互转
- 24.18 结语
- 第25章 Scala集合架构
- 25.1 集合构建器
- 25.2 抽取公共操作
- 快速通道
- 25.3 集成新的集合
- 集成序列
- 集成新的集和映射
- 总结
- 25.4 结语
- 第26章 提取器
- 26.1 示例:提取电子邮箱地址
- 26.2 提取器
- 26.3 提取0或1个变量的模式
- 26.4 提取可变长度参数的模式
- 26.5 提取器和序列模式
- 26.6 提取器和样例类的对比
- 26.7 正则表达式
- 组织正则表达式
- 查找正则表达式
- 用正则表达式提取信息
- 26.8 结语
- 第27章 注解
- 27.1 为什么要有注解?
- 27.2 注解的语法
- 27.3 标准注解
- 过时(deprecation)
- 易失(volatile)字段
- 二进制序列化
- 自动的get和set方法
- 尾递归(tailrec)
- 不检查(unchecked)
- 本地(native)方法
- 27.4 结语
- 第28章 使用XML
- 28.1 半结构化数据
- 28.2 XML概览
- 28.3 XML字面量
- 28.4 序列化
- 28.5 拆解XML
- 28.6 反序列化
- 28.7 加载和保存
- 28.8 对XML做模式匹配
- 28.9 结语
- 第29章 用对象实现模块化编程
- 29.1 问题描述
- 29.2 食谱应用程序
- 29.3 抽象
- 29.4 将模块拆分成特质
- 29.5 运行时链接
- 用Scala代码做配置
- 29.6 跟踪模块实例
- 29.7 结语
- 第30章 对象相等性
- 30.1 Scala中的相等性
- 30.2 编写相等性方法
- 陷阱#1:以错误的签名定义equals方法
- 陷阱#2:修改equals但没有同时修改hashCode
- 陷阱#3:用可变字段定义equals
- 陷阱#4:未能按等同关系定义equals方法
- 30.3 为参数化类型定义相等性
- 30.4 如何编写equals和hashCode方法
- 如何编写equals
- 如何编写hashCode
- 30.5 结语
- 第31章 结合Scala和Java
- 31.1 从Java使用Scala
- 一般的原则
- 值类型
- 单例对象
- 作为接口的特质
- 31.2 注解
- 标准注解的额外效果
- 过期
- 序列化
- 抛出的异常
- Java注解
- 编写你自己的注解
- 31.3 通配类型
- 31.4 同时编译Scala和Java
- 31.5 基于Scala 2.12特性的Java 8集成
- 从Scala 2.12使用Java 8的Stream
- 31.6 结语
- 第32章 Future和并发编程
- 32.1 天堂里的烦恼
- 32.2 异步执行和Try
- 32.3 使用Future
- 用map对Future做变换
- 用for表达式对Future做变换
- 创建Future:Future.failed、Future.successful、Future.fromTry和Promise
- 过滤:filter和collect
- 处理失败:failed、fallbackTo、recover和recoverWith
- 同时映射两种可能:transform
- 组合Future:zip、Future.fold、Future.reduce、Future.sequence和Future. traverse.
- 执行副作用:foreach、onComplete和andThen
- 32.4 测试Future
- 32.5 结语
- 第33章 组合子解析
- 33.1 示例:算术表达式
- 33.2 运行你的解析器
- 33.3 基本的正则表达式解析器
- 33.4 另一个示例:JSON
- 33.5 解析器输出
- 符号名称 vs. 由字母数字组成名称
- 关闭分号推断
- 33.6 实现组合子解析器
- 在符号名称与由字母和数字组成的名称之间进行选择
- 解析器输入
- 解析器结果
- Parser类
- 给this起别名
- 单语言符号解析器
- 顺序组合
- 备选组合
- 处理递归
- 结果转换
- 不读取任何输入的解析器
- 可选项和重复项
- 33.7 字符串字面量和正则表达式
- 33.8 词法分析和解析
- 33.9 错误报告
- 33.10 回溯和LL(1)
- 33.11 结语
- 第34章 GUI编程
- 34.1 第一个Swing应用程序
- 34.2 面板和布局
- 34.3 处理事件
- 34.4 示例:摄氏/华氏转换器
- 34.5 结语
- 第35章 SCells试算表
- 35.1 可视化框架
- 35.2 将数据录入和显示分开
- 35.3 公式
- 35.4 解析公式
- 35.5 求值
- 35.6 操作类库
- 35.7 变更通知
- 35.8 结语
- 附录A Unix和Windows环境的Scala脚本
- 术语表
- 关于作者
展开全部
出版方
电子工业出版社
电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。