编程范式-函数编程
文章目录
函数编程
仅当一个函数将一个或多个函数作为参数或作为结果返回另一个函数时,才可以将其视为高阶函数。
正宗的函数编程的概念是什么?
- stateless:函数不维护任何状态。函数式编程的核心精神是stateless,简而言之就是它不能存在状态,打个比方,你给我数据我处理完扔出来。里面的数据是不变的。
- immutable:输入数据是不能动的,动了输入数据就有危险,所以要返回新的数据集。
劣势:
数据复制比较严重。
注:有一些人可能会觉得这会对性能造成影响。其实,这个劣势不见得会导致性能不好。因为没有状态,所以代码在并行上根本不需要锁(不需要对状态修改的锁),所以可以拼命地并发,反而可以让性能很不错。比如:Erlang 就是其中的代表。reference
闭包函数
它的实际是:它允许将函数与其所操作的某些数据(环境)关联起来。这显然类似于面向对象编程(对象允许我们将某些数据(对象的属性)与一个或者多个方法相关联)–>所以闭包函数可以看作,就是一个类(它只有一个方法)的对象的方法。
example:DoTake()
|
|
example:function Option
|
|
lazy evaluations
- 示例:
|
|
visitor model
currying(柯里化)
currying(柯里化) :将一个函数的多个参数分解成多个函数, 然后将函数多层封装起来,每层函数都返回一个函数去接收下一个参数,这可以简化函数的多个参数。
|
|
Map、Reduce 和 Filter
函数式语言有三套件,Map、Reduce 和 Filter。
因为没有泛型, 所以类型不能泛型,容器不能泛型,算法不能泛型。
|
|
- Map
|
|
- Filter
|
|
- Reduce
|
|
装饰函数
所谓高阶函数就是函数当参数,把传入的函数做一个封装,然后返回这个封装函数。现象上就是函数传进传出。
add print content
|
|
lazy evalutions
|
|
附录
7 Easy functional programming techniques in Go
文章作者 zput
上次更新 2020-10-20