函数式编程框架 functionaljava 简介

一、函数式编程起源

​ 函数式编程起源于数理逻辑(范畴论,Category Theory),起源于λ演算,这是一种演算法,它定义一些基础的数据结构,然后通过归约和代换来实现更复杂的数据结构,而函数本身也是它的一种数据。所以函数式编程语言( Scala、Groovy、Clojure 、Haskell 等)中引入了一些数学上抽象的知识,需要借助于相关知识来辅助学习。

λ演算是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义、函数如何被应用以及递归的形式系统。它由数学家阿隆佐·邱奇在 20 世纪 30 年代首次发表。lambda 演算作为一种广泛用途的计算模型,可以清晰地定义什么是一个可计算函数,而任何可计算函数都能以这种形式表达和求值,它能模拟单一磁带图灵机的计算过程;尽管如此,lambda演算强调的是变换规则的运用,而非实现它们的具体机器。

—摘自于 wikipedia

函数式编程的特性如下(下面介绍的 functionaljava 框架基本实现了这些特性):

  • 函数是一等公民
  • 闭包和高阶函数
  • 惰性(Lazy)计算:每一步都是单纯的运算,而且都有返回值。
  • 纯函数:输入一定时,输出一定。即输出不受外部环境影响,同时也不影响外部环境,无副作用。
  • 递归调用
  • 函数柯里化:函数元降维技术
  • Immutable 不可变性
  • Composition 函数组合:将多个单函数进行组合,像流水线一样工作

这里讲述函数式编程起源的原因是为了更好地理解函数式编程:λ演算是函数式编程的基础(比如λ演算能模拟单一磁带图灵机的计算过程),编程式语言都具备λ演算的规则和特性。

二、functionaljava 框架简介

​ JDK8 引入了 lambda 表达式,吸收了函数式编程的部分特性,目的是对现有编码语义的优化,减少语法冗余。轻量级的将代码封装为数据,使代码简洁,易于理解。但 Java 非函数式编程语言。(有兴趣的同学可结合函数式编程的起源来理解 JDK8 的 lambda 表达式使用)。functionaljava 框架是一个提升 Java 函数式编程的开源库,该库实现了许多基本和高级编程抽象,有助于面向组合式的开发。该框架同样可以作为学习函数式编程概念的平台。

​ 学习一种新概念需要进行思维的转变,函数式编程不同于面向对象编程,最好结合 functionaljava 中的 demo 和源码来理解函数式编程思想。以下是 functionaljava 框架的知识图谱:

在这里插入图片描述
在这里插入图片描述

附:functionaljava github 地址:https://github.com/functionaljava/functionaljava