Java 函数式编程 - 概述


在函数式编程范式中,应用程序主要使用纯函数编写。这里的纯函数是没有副作用的函数。副作用的一个示例是在从函数返回值时修改实例级变量。

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

  • 函数- 函数是执行特定任务的语句块。函数接受数据、处理数据并返回结果。编写函数主要是为了支持可重用性的概念。函数一旦编写完毕,就可以轻松调用,而不必一次又一次地编写相同的代码。

    函数式编程围绕一类函数、纯函数和高阶函数。

    • 第一类函数是使用第一类实体(例如字符串)的函数,数字可以作为参数传递,可以返回或分配给变量。

    • 高阶函数是一种可以将函数作为参数和/或可以返回函数的函数。

    • 纯函数是在执行时没有副作用的函数。

  • 函数组合- 在命令式编程中,函数用于组织可执行代码,重点是代码的组织。但在函数式编程中,重点是函数如何组织和组合。通常数据和函数作为参数一起传递并返回。这使得编程能力更强、更具表现力。

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

LocalDate futureDate = LocalDate.now().plusYears(2).plusDays(3);
  • 急切求值与惰性求值- 急切求值是指表达式在遇到时立即求值,而惰性求值是指延迟执行直到满足特定条件。例如,当遇到终端方法时,Java 8 中的流方法就会被评估。

  • 持久数据结构

    − 持久数据结构保留其先前版本。每当数据结构状态发生更改时,都会创建一个新的结构副本,因此数据结构实际上保持不可变。这种不可变的集合是线程安全的。
  • 递归- 可以通过制作循环或更优雅地使用递归来完成重复计算。如果一个函数调用自身,则该函数称为递归函数。

  • 并行性- 没有副作用的函数可以以任何顺序调用,因此是惰性评估的候选者。Java 中的函数式编程使用提供并行处理的流来支持并行性。

  • 可选- 可选是一个特殊的类,它强制函数永远不应该返回 null。它应该使用可选类对象返回值。返回的对象具有 isPresent 方法,仅当存在时才可以检查该方法以获取值。