Java 函数式编程:从新手到大师之路
1. 进化而非革命
在 Java 中采用函数式编程风格,无需切换到其他语言,只需改变使用 Java 的方式。像 C++、Java 和 C# 这类语言,最初支持命令式和面向对象编程,如今也接纳了函数式编程风格。为了享受函数式编程的益处,我们需要掌握一些新的概念和实践:
- 声明式编程
- 提倡不可变性
- 避免副作用
- 优先使用表达式而非语句
- 使用高阶函数进行设计
2. 声明式编程
熟悉的命令式编程核心是可变性和命令驱动。我们创建变量或对象,并在过程中修改它们的状态,还需提供详细的命令或指令来执行。过去由于工具和硬件限制,这样编程是合理的。
而声明式地使用contains()方法(用于不可变集合时)比命令式风格更容易处理。所有复杂工作和底层细节都被封装在库函数中,我们无需处理这些细节。不可变性和声明式编程是函数式编程的核心,Java 现在让它们变得容易实现。
3. 提倡不可变性
可变代码有很多易变部分,变化越多,组件越容易出错。多个变量变化的代码难以理解和并行化。不可变性从根本上解决了这些问题。
Java 支持不可变性但不强制执行,我们可以改变修改对象状态的旧习惯,尽可能使用不可变对象:
- 声明变量、字段和参数时,倾向于声明为final。
- 创建对象时,使用不可变对象,如String类。
- 处理集合时,使用Arrays.asList()