函数式思考
实现和维护系统
共享可变数据
- 如果一个方法既不修改它的内嵌类的状态,也不修改其他对象的状态,使用
return
返回所有的计算结果,那么称其为纯粹的或无副作用的。
- 副作用:是指函数效果已经超出了函数自身范畴,包括:
- 除了构造器内的初始化操作,对类中数据结构的任何修改,包括字段的赋值操作
- 抛出一个异常
- 进行输入/输出操作,比如向一个文件写数据
声明式编程
- 命令式编程:描述如何做的编程风格,适合经典的面向对象编程,因为它的特点是它的指令和计算机底层的词汇非常接近,比如赋值、条件分支以及循环。
- 声明式编程:描述要做什么的编程风格,由程序员来制定规则,给出希望实现的目标,让系统来决定如何实现这个目标。它带来的好处非常明显,用这种方式编写的代码更加接近问题陈述。
什么是函数式编程
函数式Java编程
- 函数式的函数或方法都只能修改本地变量。除此之外,它引用的对象都应该是不可修改的对象。
- 函数式的函数或方法不应该抛出任何异常。取而代之,可以使用
Optional<T>
。
- 如果函数或方法调用的库函数如果有副作用,那么必须设法隐藏这些非函数式的行为,否则就不能调用这些方法。
引用透明性
- 引用透明性是指,如果一个函数只要传递同样的参数值,总是返回同样的结果,那么这个函数就是引用透明的。
Random#nextInt
就不是此类函数。在函数式编程中应该选择使用引用透明的函数。
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.