今天我们来谈谈函数式编程。更具体地说,我们将研究声明式编程和命令式编程之间的区别。

首先,让我们快速回顾一下这些条款。然后我们将比较这些编程风格,看看它们如何出现在 Java 中,以及该语言是否支持它们的愉快共存。

函数式编程是一种范式,其中函数被理解为数学函数,而不是过程式编程中的子例程。也就是说,在这两种范例中,对“功能”一词的解释不同。记住这一点,不要混淆它们。Java 不会让您感到困惑,因为子程序被称为“方法”,而函数是指数学函数(也称为:lambda 函数或方法引用)。

实际上,在过程编程中,函数不仅依赖于输入变量,还依赖于外部因素(例如函数之外的其他变量或系统的状态)。这意味着使用相同的参数但在不同的上下文中调用相同的函数可能会产生不同的结果。在函数式编程中,当使用相同的参数调用函数时,它总是产生相同的结果,因为函数只依赖于输入数据。

函数式编程的优点

  • 提高代码可靠性
  • 方便的单元测试
  • 编译期间代码优化的机会
  • 并发机会

函数式编程的缺点

函数式编程的缺点源于所有这些相同的特性:

  • 没有赋值语句。相反,新值存储在新变量中,导致需要不断分配和自动释放内存。因此,高效的垃圾收集是任何执行功能程序的系统的重要组成部分。

  • 非严格评估意味着函数调用的顺序是不可预测的,当操作顺序很重要时会产生 I/O 问题。

我们对函数式编程的快速回顾到此结束。现在让我们继续讨论编程风格。

命令式编程是一种编程范式,具有以下特点:

  • 该程序的源代码由指令(语句)组成。

  • 必须按顺序执行说明。

  • 执行先前指令产生的数据可以由后续指令从内存中读取。

  • 执行一条指令得到的数据可以写入内存。

以下是命令式语言的主要特点:

  • 使用布尔变量。
  • 赋值运算符的使用。
  • 复合表达式的使用。
  • 子程序的使用。

命令式程序就像自然语言中以命令式语气表达的命令。换句话说,命令式程序是一系列命令。

命令式编程语言包括 C 和 C++。

声明式编程是一种编程范式,其中指定了问题的解决方案。也就是说,描述的是最终结果,而不是实现它的方法。HTML 是声明性语言的一个例子。用这种语言编写标签时,我们不会考虑元素将如何绘制在页面上。我们只是描述页面应该是什么样子。

另一种声明式编程语言是 SQL。

让我们通过考虑一个现实生活中的例子来比较这两种编程风格:我们如何向一个人解释如何到达某个地方?

想象一下这种情况:一个人在街上走过来问我们:“我怎么去博物馆?”

通过命令式方法,我们将为他提供如何步行到达那里的算法:

  • 在这里转身
  • 直线步行 2 个街区
  • 向右转
  • ……

使用声明式方法,我们只需提供地址,然后该人就会自行到达正确的位置。

Java目前是一种多范式编程语言。多范式意味着该语言支持多种范式。

在其长期发展过程中,该语言扩展了它的面向对象模型,因此它的用户可以使用不同的工具,并可以为他们的特定任务选择最好的工具。

因此,Java 目前同时支持命令式方法(例如为方法调用编写代码)和声明式方法(例如运行时可用的注释)。

让我们总结一下:

  • 有各种编程范式。

  • 有声明式和命令式方法。

  • 您应该选择最适合手头任务的那个。

  • Java 是一种支持这两种方法的多范式语言。