第十三章 函数式的思考

为什么要采用函数式编程
  • “理想”函数没有“副作用”:多次调用一个函数,执行结果一致
    引用透明性
    如果一个函数只要传递同样的参数值,总是返回同样的结果,那这个函数就是引用透明。

第十四章 函数式编程的技巧

高阶函数

满足下面任一要求就可以被称为高阶函数:

  • 至少接受一个函数作为参数
  • 返回的结果是一个函数

    科里化
  • 定义:是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

  • 作用:模块化函数、提高代码重用性
    持久化数据结构
    函数式方法不允许修改任何全局数据结构或者任何作为参数传入的参数,一旦对这些数据进行修改,两次相同的调用就可能产生不用的结果,违背了引用透明性原则
    Stream延迟计算
    Stream就像一个黑盒,它接受请求生成结果,当你向一个Stream发起一系列的操作请求时,这些请求只是被一一保存起来。只有当你向Stream发起一个终端操作时,才会实际地进行计算

第十五章 面向对象和函数式编程的混合:Java 8和Scala的比较

简单介绍了Scala,没什么好总结的

第十六章 结论以及Java的未来

回顾
  • 行为参数化
    • Lambda
    • 方法引用

提高了代码的可复用性和可阅读性

针对集合操作提供了一套高级“语法糖”

  • CompletableFuture

针对Future操作提供了一套高级“语法糖”

  • Optional

解决了变量引用引发的NPE问题,代码更加流畅易读易维护

  • 默认方法

类库设计者能够更加平滑的修改架构设计,屏蔽了将来接口变化对类库使用者的影响

总结:Java8一系列特性,能够极大的提高日常工作中的编码效率,如使用Stream操作集合,CompletableFuture执行异步操作;同时使用函数式编程能够使得代码可读性更高,更易于维护以及具备更好的可重用性;