Scala函数式编程

出版日期:2016-3-1
ISBN:9787121283301
作者:Paul Chiusano,Rúnar Bjarnason
页数:236页

内容概要

王宏江,现任挖财技术部资深架构师,从事软件开发有十多年。曾在阿里巴巴担任架构师,参与过1688、来往等网站的基础建设,以及淘宝类目等基础业务重构,并在淘宝中间件负责过应用容器与分布式框架团队。Tomcat方面的专家,善于诊断问题以及性能调优。有丰富的企业架构和大型互联网技术架构经验。同时也是函数式编程爱好者,和Scala布道者。

书籍目录

原推荐序
序言
致谢
关于本书
函数式编程介绍
1什么是函数式编程
1.1 函数式编程的好处:一个简单的例子
1.1.1 一段带有副作用的程序
1.1.2 函数式的解法:去除副作用
1.2 (纯)函数究竟是什么
1.3 引用透明、纯粹度以及替代模型
1.4 小结
2在Scala中使用函数式编程
2.1 Scala语言介绍:
2.2 运行程序
2.3 模块、对象和命名空间
2.4 高阶函数:把函数传给函数
2.4.1 迂回做法:使用循环方式
2.4.2 第一个高阶函数
2.5 多态函数:基于类型的抽象
2.5.1 一个多态函数的例子
2.5.2 对高阶函数传入匿名函数
2.6 通过类型来实现多态
2.7 小结
3函数式数据结构
3.1 定义函数式数据结构
3.2 模式匹配
3.3 函数式数据结构中的数据共享
3.3.1 数据共享的效率
3.3.2 改进高阶函数的类型推导
3.4 基于list的递归并泛化为高阶函数
3.4.1 更多与列表相关的函数
3.4.2 用简单组件组合list函数时的效率损失
3.5 树
3.6 小结
4不是用异常来处理错误
4.1 异常的优点与劣势
4.2 异常的其他选择
4.3 Option数据类型
4.3.1 Option的使用模式
4.3.2 Option的组合、提升及对面向异常的API的包装
4.4 Either数据类型
4.5 小结
5严格求值和惰性求值
5.1 严格和非严格函数
5.2 一个扩展例子:惰性列表
5.2.1 对Stream保持记忆,避免重复运算
5.2.2 用于检测Stream的helper函数
5.3 把函数的描述与求值分离
5.4 无限流与共递归
5.5 小结
6纯函数式状态
6.1 以副作用方式生成随机数
6.2 纯函数式随机数生成器
6.3 用纯函数式实现带状态的API
6.4 状态行为的更好的API
6.4.1 组合状态行为
6.4.2 嵌套状态行为
6.5 更通用的状态行为数据类型
6.6 纯函数式命令编程
6.7 小结
功能设计和组合子库
7纯函数式的并行计算
7.1 选择数据类型和函数
7.1.1 一种用于并行计算的数据类型
7.1.2 组合并行计算
7.1.3 显性分流
7.2 确定表现形式
7.3 完善API
7.4 API与代数
7.4.1 映射法则
7.4.2 分流法则
7.4.3 打破法则:一个微妙的bug
7.4.4 用Actor实现一个完全无阻塞的Par
7.5 完善组合子为更通用的形式
7.6 小结
8基于性质的测试
8.1 基于性质测试概览
8.2 选择数据类型和函数
8.2.1 API的初始代码片段
8.2.2 性质的含义与API
8.2.3 生成器的意义和API
8.2.4 生成值决定生成器
8.2.5 精炼Prop的数据类型
8.3 最小化测试用例
8.4 使用库并改进其易用性
8.4.1 一些简单的例子
8.4.2 为并行计算编写测试套件
8.5 测试高阶函数及展望未来
8.6 生成器法则
8.7 小结
9语法分析器组合子
9.1 代数设计,走起
9.2 一种可能的代数
9.2.1 切片和非空重复
9.3 处理上下文的相关性
9.4 写一个JSON分析器
9.4.1 JSON格式
9.4.2 JSON分析器
9.5 错误提示
9.5.1 一种可行的设计
9.5.2 错误嵌套
9.5.3 控制分支和回溯轨迹
9.6 实现代数
9.6.1 一种可能的实现
9.6.2 串化分析器
9.6.3 标记分析器
9.6.4 故障转移和回溯
9.6.5 上下文相关的分析
9.7 小结
函数设计的通用结构
10Monoid
10.1 什么是monoid
10.2 使用monoid折叠列表
10.3 结合律和并行化
10.4 例子:并行解析
10.5 可折叠数据结构
10.6 组合monoid
10.6.1 组装更加复杂的monoid
10.6.2 使用组合的monoid融合多个遍历
10.7 小结 151
11Monad
11.1 函子:对map函数的泛化
11.1.1 函子法则
11.2 Monad:对flatMap和unit函数的泛化
11.3 Monadic组合子
11.4 单子定律
11.4.1 结合法则
11.4.2 为指定的monad证明结合法则
11.4.3 单位元法则
11.5 什么是monad
11.5.1 identity monad
11.5.2 状态monad和partial type application
11.6 小结
12可应用和可遍历函子
12.1 泛化单子
12.2 Applicative trait
12.3 单子与可应用函子的区别
12.3.1 对比Option applicative与Option monad
12.3.2 对比Parser applicative与Parser monad
12.4 可应用函子的优势
12.4.1 不是所有的可应用函子都是Monad
12.5 可应用法则
12.5.1 Left and right identity
12.5.2 结合律
12.5.3 Naturality of product
12.6 可遍历函子
12.7 使用Traverse
12.7.1 从monoid到可应用函子
12.7.2 带状态的遍历
12.7.3 组合可遍历结构
12.7.4 遍历融合
12.7.5 嵌套遍历
12.7.6 Monad组合
12.8 小结
作用与I/O
13外部作用和I/O
13.1 分解作用13.2 一个简单的IO类型
13.2.1 处理输入效果
13.2.2 简单IO类型的优缺点
13.3 避免栈溢出
13.3.1 将一个控制流转化为数据构造子
13.3.2 Trampolining:栈溢出的通用解决方法
13.4 一个更微妙的IO类型
13.4.1 合理的monad
13.4.2 一个支持控制台I/O的monad
13.4.3 纯解释器
13.5 非阻塞和异步I/O
13.6 一个通用的IO类型
13.6.1 最终的main程序
13.7 为什么IO类型不足以支撑流式I/O
13.8 小结
14本地影响和可变状态
14.1 纯函数式的可变状态
14.2 一种限制副作用范围的数据类型
14.2.1 受限可变性的语言表达
14.2.2 一种可变引用的代数表达
14.2.3 执行修改状态的行为
14.2.4 可变数组
14.2.5 一个纯函数的in-place快排实现
14.3 纯粹是相对于上下文的
14.3.1 副作用是什么?
14.4 小结
15流式处理与增量I/O
15.1 命令式I/O的问题示例
15.2 一个简单的流转换器
15.2.1 创建Process
15.2.2 组合和追加处理
15.2.3 处理文件
15.3 可扩展的处理类型
15.3.1 来源
15.3.2 保证资源安全
15.3.3 单一输入过程
15.3.4 多个输入流
15.3.5 去向
15.3.6 Effectful通道
15.3.7 动态资源分配
15.4 应用场景
15.5 小结

作者简介

函数式编程(FP)是一种软件开发风格,它注重不依赖于编程状态的函数。函数式代码易于测试和复用,容易实现并发,且不容易受到bug的攻击。Scala是一种能很好支持函数式编程的新兴JVM语言。《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程相关的各种“为什么”和“怎么做”;如何编写多核程序;练习和检测。


 Scala函数式编程下载 更多精彩书评



发布书评

 
 


精彩书评 (总计1条)

  •     我是使用scala做完一个项目之后,开始阅读本书。介绍下背景:1 程序员2 前C程序员,linux平台,没有很深的java背景3 用scala做过一个2年期的项目在使用scala的过程中,碰到的问题主要体现在:1 scala的很多语法糖不理解,不知道为啥要这么写,有种为了这么写的简洁而这么写的感觉2 scala很多库在设计的时候,不理解原因,包括Option,Collection的很多看似有冗余的地方3 很多scala的默认写法,不理解4 多态的具体化,尤其是协变的意义所在5 各种重载的符号使用之前读过 programming in scala,对语言的整体还停留在:1 scala用起来比java更灵活2 强大的collection,可以更加方便的处理collection类的数据3 不同于java的并行处理方法,有点像c的逻辑思路4 开发成本比java小,但是语言学习成本比java高很多正在阅读这本书的过程中,只能一点一点说。第一部分快要读完了,习题也快要做完了。1 第一部分主要着墨点正是回答我上述问题的1,2,3的。很大篇幅都放在,使用scala实现scala默认库文件的API中,通过对简单的函数式编程逻辑的介绍和实践,主要是实践,建立起来一个比较明晰的scala思维模式,或者叫函数式编程的思维模式。2 无副作用的函数式编程,同时也解释了为什么在scala中,val和var的区分为什么那么重要。3 在做习题的过程中,尤其是在做类型推导的过程中,对原来oop,命令式编程向函数式编程转变有很大作用;而且简洁的语法,确实让人有享受编程的感觉。

精彩短评 (总计6条)

  •     练习多,见真功夫。
  •     本书的核心在于函数式编程而不是scala语言本身
  •     学函数式编程最好的书籍(之一),可惜里面的大多数东西都在过去捣鼓Haskell学过了,要是能早几年读就好了
  •     买回来是打算学习scala的,结果发现是偏向函数式编程思维的,scala语言只是一个通道或者媒介
  •     全是干货,有些章节和习题比较烧脑。需要多刷几遍…
  •     好书好书好书,重说三。
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024