序言
多年以来,函数式编程被认为是少数人的游戏,这些人总是强调自己在智力上的优越性,认为函数式编程的智慧不适合推广给普罗大众。
写作此书的目的就是为了挑战这种思想,函数式编程并没有多么了不起,也绝不是少数人的游戏。
在过去的两年中,我请伦敦 Java 社区的开发人员以各种方式测试 Java 8 的新特性。
我发现很多人都喜欢 Java 8 的新用法和类库。
他们有可能被一些术语和高大上的概念吓到,但是稍稍一丁点儿函数式编程技巧都能给编程带来便利,他们对此喜不自胜。
人们津津乐道的话题之一是使用新的 Stream API 操作对象和集合类时(比如从所有的唱片列表中过滤出在英国本地出品的唱片时),代码是多么易读。
组织这些 Java 社区活动,让我认识到了示例代码的重要性。
人们通过不断地阅读和消化这些简单的示例,最终归纳出某种模式。
我还意识到术语是多么令人讨厌,因此,在介绍一个晦涩的概念时,我都会给出通俗易懂的解释。
对很多人来说,Java 8 提供的函数式编程元素有限:没有单子,没有语言层面的惰性求值,
也没有为不可变性提供额外支持。
对实用至上的程序员来说,这没什么大不了的,我们只想在类库级别抽象,写出简单干净的代码来解决业务问题。
如果有人为我们写出这样的类库,那再好不过了,这样我们就可以把主要精力放在日常工作上了。
为什么要阅读本书
本书将探讨如下主题。
-
如何编写出简单、干净、易读的代码——尤其是对于集合的操作?
-
如何简单地使用并行计算提高性能?
-
如何准确地为问题建模,并且开发出更好的领域特定语言?
-
如何写出不易出错,并且更简单的并发代码?
-
如何测试和调试 Lambda 表达式?
将 Lambda 表达式加入 Java,并不只是为了提高开发人员的生产效率,业界也对这一特性有根本性的需求。
本书读者对象
本书面向那些已经掌握 Java SE,并且想尽快了解 Java 8 新特性的开发人员。
如果你对 Lambda 表达式感兴趣,想知道它怎么帮助你提升专业技能,那么这本书就是为你而写的。
我假设读者还不知道 Lambda 表达式,以及 Java 8 中核心类库的变化,我将从零开始介绍这些概念、类库和技术。
虽然我想让所有开发人员都来买这本书,但这不现实,这不是一本适合所有人的书。如果你一点儿也不懂 Java,那么这本书就不适合你。
同时,尽管本书会详细讲解 Java 中的Lambda 表达式,但是我不会解释怎样在其他语言中使用 Lambda 表达式。
我也不会讲解 Java SE 中一些基本的概念,比如集合类、匿名内部类或者 Swing 中的事件处理机制。
我假设读者已经掌握了这些知识。
怎样阅读本书
本书采用了示例驱动的写作风格:介绍完一个概念之后,就会紧跟一段代码。
代码中的一些片段,有时你可能无法全部看懂。
没关系,通常在代码后面会紧跟一段文字,讲解代码的细节。
这种方式能让你边学边练,多数章节还在最后提供了练习题,供读者自行练习。
我强烈建议读者读完一章后完成这些练习,熟能生巧。
每个务实的程序员都知道,自欺欺人很容易,你觉得读懂一段代码了,其实还是遗漏了一些细节。
使用 Lambda 表达式,就是将复杂性抽象到类库的过程。
在本书中,我会引入很多常用类库的细节。
第 2 章至第 6 章介绍了 JDK 8 中核心语言的变化以及升级后的类库。最后三章介绍了如何在真实环境下使用函数式编程。
第 7 章介绍一些让测试和调试Lambda 表达式变得容易的技巧;
第 8 章解释现有的那些良好的软件设计原则如何应用到Lambda 表达式上;
第 9 章讨论并发,怎样使用 Lambda 表达式写出易读且易于维护的并发代码。
涉及第三方类库时,这些章节也会加以介绍。
读者可以将前四章当作 Java 8 的入门指南——要用好 Java 8,每个人都必须学会这些知识。
后面的几章难度略高,但掌握了这几章的内容,你就可以成为知识更加全面的程序员,在自己的设计中得心应手地使用 Lambda 表达式。
你在不断学习的过程中,也会接触大量的练习,答案可以在 GitHub(https://github.com/RichardWarburton/java-8-Lambdas-exercises) 上找到。
如果你能边学边练,就能迅速掌握 Lambda 表达式。
使用代码示例
可以在这里下载本书随附的资料(代码示例、练习题等):https://github.com/RichardWarburton/java-8-lambdas-exercises。
参考资料
《java8 函数式编程》