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等等。二是了解了函数式编程的思想和方法。对函数式编程的印象中,有两点最深刻:一是它很灵活,扩展性和可组装性强大,擅长于抽出模式,很适合用于编写库;二是它很像是在写编译器,常常会用个数据结构描述计算,再用具体的辅助函数来解释执行,将描述与执行分离,可以在后级做优化,很有趣。

在编写工作代码时,我用书中的知识技巧完成了两个库。学以致用,好生快乐!详见:

两个月的时间,还是挺漫长的。总算结束了,大功告成,又如释重负。