飞利浦·斯塔克|Java:什么是Java中的函数式编程

飞利浦·斯塔克|Java:什么是Java中的函数式编程

文章图片


每种编程语言都由某些语法和结构规范定义 , 这些规范称为编程范式 。 有不同的范式可用:命令式、面向对象、函数式、逻辑等 。 现代编程语言足够复杂 , 可以建立在一个或多个范例之上 , 函数式编程是众多此类范例之一 , 它强调编程的声明性方面 , 其中业务逻辑由纯函数组成 , 这一想法在某种程度上与面向对象方法的本质形成鲜明对比 , Java 在语言的句法结构中很好地吸收了这种技术 。

开发人员现在可以使用 lambda 无缝编织代码的功能方面 , 而无需破坏现有架构 , 甚至无需担心向后兼容性 。 在这里 , 在本文中 , 我们将从 Java 的角度了解关于函数式编程 。
编程范式概述
【飞利浦·斯塔克|Java:什么是Java中的函数式编程】简而言之 , 编程范式是一种有效地用于对问题域建模的思维或抽象模式 。 这就是编程语言所吸收的内容 , 并允许程序员严格按照该原则使用它 。 可能有不同类型的问题需要以不同的思维方式加以解决 。 这导致了各种编程范式及其相应的编程语言的演变 。

例如 , 如果我们回顾一下机器语言盛行的1940年代 , 程序员实际上必须绝对详细地编写每条指令 。 这些指令通常包含状态和变量 , 并像打开的书一样操纵内存 。 这些说明是对简单任务的详细阐述 , 例如加法或逻辑计算 。 一些现代编程语言遵循类似的命令式描述模式 , 可能不是全部 , 但原则是存在的 。 这些类型的语言非常适合低级编程 , 例如从头开始构建事物或直接与硬件交互 。一些编程语言遵循声明而不是描述的原则 。 在这里 , 声明实际含义的表述的一致性取决于对声明性规范的解释 。 紧随其后的是高级语言 , 它们主要专注于完成工作 , 而不是花时间描述如何完成工作 。 这种类型的一个很好的例子是 SQL , 我们只关注获取记录 , 而不是描述如何获取记录的每个细节 。
然而 , 有趣的是 , Java 如何将函数式范式吸收到面向对象风格的主流中而没有对语言的设计进行任何重大更改 。 这不仅启动了 lambda 的使用 , 而且还为用 Java 表达解决方案语句的全新方式提供了必要的成分 。 然而 , 函数式编程仍然是 Java 中的一个可选特性 。 一个人绝对可以做任何他想做的事情 , 而不用丝毫暗示 , 但这样做 , 我们肯定会在此过程中被剥夺它的好处 。
函数式编程和Lambda演算
函数式编程起源于称为函数理论的数学模型和 Lambda 演算中的 lambda 。 Lambda 表达式利用函数式编程特性 。 在 Java 中使用 lambda 最明显的体验是它简化并减少了创建某些构造(例如匿名类)所需的源代码量 。 但是 , 请注意 , lambda 不仅仅是简化符合眼睛的编码结构 , 在这个过程中 , Java 引入了一个新的语法元素——一个新的运算符(->)——以及类型推断的概念 。

许多编程语言在其句法结构中使用这种现象 , 因为它通常允许人们编写更简单、更清晰的代码 。 利用函数式编程概念的最常见和流行的编程语言之一是 JavaScript 。
OOP与函数式编程的概述
十多年来 , OOP语言几乎满足了程序员的所有需求 , 毫无疑问 , 在未来的许多年里 , OOP 语言将继续如此 。 但是 , 在某些情况下 , 函数式编程似乎提供了更好的解决方案构造 。
在OOP中 , 一切都表示为对象; 因此 , 即使我们只需要实现行为 , 问题的每个解决方案都必须定义为类及其属性的方案 。 这种情况是函数式编程的利基 , 我们只通过函数而不是对象来定义行为 。 这意味着在函数式编程中 , 我们直接实现一个函数 , 而不是一个包含函数的类 。 这是OOP和函数式编程的基本区别 。