笔记:Functional Programming in Scala
update: 2017-06-23
早上四点就自然醒了,没了睡意,就整理下最近在看的函数式编程书籍Functional Programming in Scala, 2015。同事推荐说有点烧脑,做了开头两章,确实挺好玩的。
官方在Github上有个仓库,放了习题、指导和答案,很方便,见fpinscala/fpinscala。遗憾的是我没有看到习题配套的单元测试用例来校验正确性,所以自己建了个mvn工程,作业都放在facaiy/book_notes。希望尽量都做一遍,耗时预计在两个月。
目录
PART 1 INTRODUCTION TO FUNCTIONAL PROGRAMMING
1 What is functional programming?
2 Getting started with functional programming in Scala
3 Functional data structures
4 Handling errors without exceptions
5 Strictness and laziness
6 Purely functional state
PART 2 FUNCTIONAL DESIGN AND COMBINATOR LIBRARIES
7 Purely functional parallelism
8 Property-based testing
9 Parser combinators
PART 3 COMMON STRUCTURES IN FUNCTIONAL DESIGN
10 Monoids
11 Monads
12 Applicative and traversable functors
PART 4 EFFECTS AND I/O
13 External effects and I/O
14 Local effects and mutable state
15 Stream processing and incremental I/O
后记
学习时,对于第一至三部分,下了很多工夫,基本完成了全部习题。而最后的第四部份,相对更复杂,也不在兴趣点上,只是泛泛一览而过。
主要收获有两点:一是熟悉了scala的诸多高级特性,如Generic, Implicit, Lambda type等等。二是了解了函数式编程的思想和方法。对函数式编程的印象中,有两点最深刻:一是它很灵活,扩展性和可组装性强大,擅长于抽出模式,很适合用于编写库;二是它很像是在写编译器,常常会用个数据结构描述计算,再用具体的辅助函数来解释执行,将描述与执行分离,可以在后级做优化,很有趣。
在编写工作代码时,我用书中的知识技巧完成了两个库。学以致用,好生快乐!详见:
- facaiy/DAG-lite: 轻量调度库。借鉴了书中懒惰求值和并行的设计。
- facaiy/math-expression-parser:数学表达式解析器。借鉴了书中Parser的处理。
两个月的时间,还是挺漫长的。总算结束了,大功告成,又如释重负。