编程范式:函数式编程

97 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情

image.png 在Clean Architecture里面我们讲了三种编程范式,函数式编程是其中的一种,函数式编程是最早提出的一种,但是一直都没有广泛的使用,到现在这几年广泛的使用,就如现在的android开发,Google提出了Android UI的Compose 声明式UI,就是函数式编程。所以今天想一边学习一边将知识记录下来。

什么是函数式编程

函数式编程是一种声明式的编程,有一种说法是说函数式编程中的函数不是编程语言中的函数,而是数学中的函数,我不能确认这种说法。还有一种说法是:函数式编程是一种通过应用和组合函数来构建程序的编程范式。感觉都有点抽象,但是如果说是数学的函数,其实也就比较好理解了。

函数式编程的特点

函数式编程有以下几个特点:

    1. 不可变性(Immutability)
    1. 纯函数(Pure Functions)
    1. 数据转换(Data Transformations)
    1. 高阶函数(Higher-Order Functions)
    1. 递归
    1. 组合

不可变性

不可变性从字面上说就是不可改变,一个不可变对象的状态在其构造完成之后就不可改变,那么构造函数就是唯一改变对象的方法。

纯函数

纯函数类似数学中的函数,相同的输入永远会得到相同的输出。纯函数没有副作用,即它不会改变全部变量。

数据转换

上面讲了数据的不可变性,那么既然是不可变了,那如果程序就是需要改变要怎么办呢,我们需要如何转换数据呢?大部分采取的做法就是使用原生数据的副本进行改变,而不是直接更改原始数据。

高阶函数

高阶函数即将函数作为函数的参数,并且函数也可以作为一个返回值使用。高阶函数的灵活性非常好,大大降低了编程的难度,但是如果高阶函数使用不当也会带来一些副作用。

递归

递归大家基本都使用过,递归在某些时候可以替换循环,而是程序的效率更好,但是递归也需要考虑栈溢出的问题。

组合

我们把一个功能分解成多个功能单一的函数,对这些单一的函数进行组装和组合,从而完成产品的功能。