Java中的 函数式 编程范式(翻译+汇总)
函数式编程范式 略讲
每种编程语言均有自己的语法和结构规范定义。 这些规范即称为编程范式。 编程范式的英语是 Programming Paradigm,范即模范之意,范式即模式、方法,是一类典型的编程风格,是指从事软件工程的一类典型的风格。
现在的可用编程范式有:命令式,面向对象,函数式,逻辑式等等。
现代编程语言非常复杂,无法建立在一个或多个范例上。
函数式编程作为编程范式之一,着重于编程的声明性方面,其中业务逻辑由纯函数组成,这种想法在某种程度上与面向对象方法的本质形成了对比。 有趣的是,Java将该技术很好地吸收到了该语言的语法结构中。 现在,开发人员可以使用lambda无缝编织代码的功能方面,而无需破坏现有体系结构,甚至不必担心向后兼容性。

图中的 Imperative
为 命令式,命令式的编程范式是命令驱动的,必须指明任务是什么,并阐述如何完成。
Declarative
为陈述式
面向对象与函数式
在OOP中,所有事物都表示为一个对象。 因此,即使只需要实现某一行为,例如简单的加法,也必须定义成一个类及其属性组成的格式。
在函数式编程中,我们通过函数定义行为,而不通过对象定义行为。 这意味着在函数式编程中,我们直接实现函数,而不是包含函数的类。(This means in functional programming we directly implement a function rather than an class that contains a function)
这是OOP和功能编程之间的基本区别。
函数式编程与纯函数式编程(Functional programming vs Purely Functional programming)
纯函数式编程,本质上不允许任何的可变性
函数式风格的语言提供了高阶函数,但是也引入了可变性,可能会导致错误
因此,如果一种语言提供了高阶函数(higher-order function ),那他就是一种函数式编程语言。如果一种语言除了高阶函数外,还控制了其中的可变性(mutability ),那么它就是一种纯函数式语言。
Java是一种函数式语言,Haskell是一种纯函数式语言
以下是一些函数式编程的基本概念:
-
高阶函数(high-order function): 在函数式编程中,函数为一等公民。在传统的编码风格中,我们可以对
对象(Object)
做如下几种操作- 将对象作为参数传递给一个函数
- 在函数内创建一个对象
- 函数返回一个对象
而在高阶函数中,我们可以做如下处理:
- 将函数作为参数传递给一个函数
- 在函数内创建一个函数
- 函数的返回值为一个函数
-
纯函数(Pure function): 如果函数始终为相同的参数值返回相同的结果,并且没有诸如修改参数(或全局变量)或输出某些内容之类的副作用,则该函数称为纯函数。
-
lambda 表达式: lambda 表达式是一种匿名方法,有且只有一个参数列表和一个方法主体,并根据上下文推断函数返回类型。另外,
Lambda expressions work in parallel with the functional interface.
Lambda表达式的语法为 (parameter) -> body
Java7 的匿名方法 对比 Java 8的 lambda表达式
java 7 :
// Java program to demonstrate
// anonymous method
import java.util.Arrays;
import java.util.List;
public class GFG {
public static void main(String[] args)
{
// Defining an anonymous method
Runnable r = new Runnable() {
public void run()
{
System.out.println(
"Running in Runnable thread");
}
};
r.run();
System.out.println(
"Running in main thread");
}
}
JAVA 8
import java.util.Arrays;
import java.util.List;
public class GFG {
public static void main(String[] args)
{
Runnable r
= ()
-> System.out.println(
"Running in Runnable thread");
r.run();
System.out.println(
"Running in main thread");
}
}
原文:
网友评论