Java8-函数式编程

Java8-函数式编程

基础概念

  • 函数式编程FP(Functional Programming)

    函数式编程是一种编程范式(programming paradigm),追求的目标是整个程序都由函数调用(function applying)以及函数组合(function composing)构成的。

  • 纯函数(purely function)

    当参数值不变的时候,多次运行函数,得到的结果总是一样的函数为纯函数。

  • 面向对象编程OOP(Object Oriented Programming)

FP和OOP的区别

OOP的精髓在于“封装对象”,而FP的精髓在于“不涉及外部状态”。

一门开发语言,可以既支持OOP,同时也支持FP,两者并不是矛盾的。

函数式编程的特性

  • 函数是“第一等公民”(first-class citizens)

    函数和其它数据类型具备同等的地位,可以赋值给某个变量,可以作为另一个函数的参数,也可以作为另一个函数的返回值。

  • 没有“副作用”(side effects)

    “副作用(side effects)”,指的是函数在执行的时候,除了得出计算结果之外,还会改变函数以外的状态。“副作用”的典型场景就是修改了程序的全局变量(譬如Java中某个全局可见的类的属性值、某个类的静态变量等等);修改传入的参数也属于“副作用”之一;IO操作或调用其它有“副作用”的函数也属于“副作用”。

    函数式编程中要求函数都是“纯函数(purely function)”。给定了参数后,多次运行纯函数,总会得到相同的返回值,而且它不会修改函数以外的状态或产生其它的“副作用”。

  • 引用透明(Referential transparency)

    引用透明(Referential transparency),指的是函数的运行不依赖于外部状态或外部变量,只依赖于输入的参数。任何时候只要参数相同,运行函数所得到的返回值总是相同的。

函数式编程的优点

  • 便于单元测试和调试(Debugging)

    由于函数式编程的“没有副作用”和“引用透明”的特点,每个函数都是一个独立的逻辑单元,不依赖于外部的状态或变量,也不修改外部的状态或变量。给定了参数后,多次运行函数,总会得到相同的返回值。这对单元测试者以及调试者来说,简直是最理想的情形。

  • 易于“并发编程”

    同样的,函数式编程不依赖于也不会修改外部的状态或变量,因此我们不需要考虑多线程的并发竞争、死锁等问题,因为我们根本不需要加“锁”。这样,并发编程的复杂度将大大降低,部署也非常方便。

    在大数据和多核时代,这个优点被更大的放大了,这也是函数式编程思想焕发活力的主要原因。

参考资料

posted @ 2021-11-08 12:58  94许芒芒  阅读(155)  评论(0)    收藏  举报