Functional Programming With Java 简明教程

Functional Programming with Java - Overview

在函数式编程范式中,应用程序通常使用纯函数编写。此处纯函数是没有副作用的函数。副作用的一个示例是函数返回一个值的同时修改实例级别变量。

以下是函数式编程的关键方面:

  1. Functions - 函数是执行特定任务的一段语句块。函数接受数据、处理它并返回一个结果。函数首先用于支持可重复使用的概念。编写函数之后,可以轻松地调用它,而无需一遍又一遍地编写相同的代码。函数式编程围绕一等函数、纯函数和高阶函数展开。一等实体 First Class Function 是字符串、数字等可以使用作参数传递、可以返回或分配给变量的实体。 High Order Function 是可以把函数用作参数和/或可以返回函数的实体。 Pure Function 是在执行过程中没有副作用的实体。

  2. Functional Composition - 在命令式编程中,函数用于组织可执行代码,而重点在于代码组织。但在函数式编程中,重点在于如何组织和组合函数。通常,数据和函数作为参数一起传递并返回。这使编程更具能力且更有表现力。

  3. Fluent Interfaces - 流畅的界面有助于编写和理解易于的表达式。当每个方法返回类型再次重用时,这些界面有助于链接方法调用。例如:

LocalDate futureDate = LocalDate.now().plusYears(2).plusDays(3);
  1. Eager vs Lazy Evaluation - 热切求值意味着一遇到表达式就对其求值,而延迟求值是指推迟执行直到满足特定条件。例如,在遇到结束方法时对 Java 8 中的流方法进行求值。

  2. 持久数据结构 - 持久数据结构维护其前一个版本。每当对数据结构状态进行更改时,都将创建一个新结构副本,使得数据结构实际上保持不变。这些不可变的集合是线程安全的。

  3. Recursion - 我们可以通过更加优雅的方式进行循环或使用递归来完成重复的计算。如果函数调用自身,则该函数称为递归函数。

  4. Parallelism - 没有副作用的函数可以按任何顺序调用,因此它们是延迟求值的候选函数。Java 中的函数式编程使用流支持并行化,其中提供了并行处理。

  5. Optionals - Optional 是一个特殊类,它强制函数不得返回空值。它应当使用 Optional 类对象返回一值。此返回对象具有 isPresent 方法,可以对其进行检查,仅当存在该值时才获取该值。