Java 函数式编程 - 概述



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

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

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

    函数式编程围绕一等函数、纯函数和高阶函数展开。

    • 一等函数是指可以使用诸如字符串、数字等一等实体作为参数、可以作为返回值或赋值给变量的函数。

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

    • 纯函数是指在执行期间没有副作用的函数。

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

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

LocalDate futureDate = LocalDate.now().plusYears(2).plusDays(3);
  • 急切求值 vs 惰性求值 - 急切求值表示表达式在其遇到的第一时间进行求值,而惰性求值是指延迟执行直到满足某些条件。例如,Java 8 中的流方法在遇到终止方法时才进行求值。

  • 持久化数据结构

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

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

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

广告
© . All rights reserved.