Java8实战笔记0x09

函数式思考

实现和维护系统

共享可变数据

  • 如果一个方法既不修改它的内嵌类的状态,也不修改其他对象的状态,使用return返回所有的计算结果,那么称其为纯粹的或无副作用的。
  • 副作用:是指函数效果已经超出了函数自身范畴,包括:
    • 除了构造器内的初始化操作,对类中数据结构的任何修改,包括字段的赋值操作
    • 抛出一个异常
    • 进行输入/输出操作,比如向一个文件写数据

声明式编程

  • 命令式编程:描述如何做的编程风格,适合经典的面向对象编程,因为它的特点是它的指令和计算机底层的词汇非常接近,比如赋值、条件分支以及循环。
  • 声明式编程:描述要做什么的编程风格,由程序员来制定规则,给出希望实现的目标,让系统来决定如何实现这个目标。它带来的好处非常明显,用这种方式编写的代码更加接近问题陈述。

什么是函数式编程

函数式Java编程

  • 函数式的函数或方法都只能修改本地变量。除此之外,它引用的对象都应该是不可修改的对象。
  • 函数式的函数或方法不应该抛出任何异常。取而代之,可以使用Optional<T>
  • 如果函数或方法调用的库函数如果有副作用,那么必须设法隐藏这些非函数式的行为,否则就不能调用这些方法。

引用透明性

  • 引用透明性是指,如果一个函数只要传递同样的参数值,总是返回同样的结果,那么这个函数就是引用透明的。Random#nextInt就不是此类函数。在函数式编程中应该选择使用引用透明的函数。
Author: SinLapis
Link: http://sinlapis.github.io/2019/08/22/Java8实战笔记0x09/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.