Java中的 函数式 编程范式(翻译+汇总)

Java中的 函数式 编程范式(翻译+汇总)


函数式编程范式 略讲

每种编程语言均有自己的语法和结构规范定义。 这些规范即称为编程范式。 编程范式的英语是 Programming Paradigm,范即模范之意,范式即模式、方法,是一类典型的编程风格,是指从事软件工程的一类典型的风格。

现在的可用编程范式有:命令式,面向对象,函数式,逻辑式等等。

现代编程语言非常复杂,无法建立在一个或多个范例上。

函数式编程作为编程范式之一,着重于编程的声明性方面,其中业务逻辑由纯函数组成,这种想法在某种程度上与面向对象方法的本质形成了对比。 有趣的是,Java将该技术很好地吸收到了该语言的语法结构中。 现在,开发人员可以使用lambda无缝编织代码的功能方面,而无需破坏现有体系结构,甚至不必担心向后兼容性。

The evolution of various programming languages

图中的 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"); 
    } 
} 

原文:

What Is Functional Programming in Java?

Functional Programming in Java with Examples

你可能感兴趣的:(Java中的 函数式 编程范式(翻译+汇总))