学习总结——函数式编程、柯里化、函数组合、函子

370 阅读2分钟

详细笔记可参考: 学习笔记——函数式编程、柯里化、函数组合、函子

1. 函数式编程

A. 函数式编程是一种编程范式,跟面向对象编程是并列关系

B. 函数式编程可以很大程度上让代码可以重用

C. 函数式编程不能提高程序的性能,因为大量使用闭包在某种程度上会降低性能(占用内存)

D. 函数式编程中的函数不是程序中的函数或者方法,而是数学中的函数

2. 函数是一等公民包括

A. 函数可以存储在变量中

B. 函数可以作为参数

C. 函数可以作为返回值

3. 纯函数

A. 纯函数对于相同的输入永远会得到相同的输出

B. 纯函数中的函数指的是数学中的函数

C. 副作用会让一个函数变的不纯

D. 副作用不可能避免,因为代码难免会依赖外部的配置文件、数据库等,只能最大程度上控制副作用在可控的范围内发生

4. 柯里化

A. 柯里化函数 curry,也是高阶函数

B. 柯里化函数 curry 内部用到了闭包,对函数的参数做了“缓存”

C. 柯里化可以把多个参数的函数转换成只有一个参数的函数,通过组合产生功能更强大的函数

D. 柯里化让函数变的更灵活,让函数的粒度更小

5. 函数组合

A. 函数可以看做一个处理数据的管道,管道中输入参数 x,在管道中对数据处理后得到结果 y

B. 通过函数组合可以把多个一元函数组合成一个功能更强大的函数

C. 函数组合需要满足结合律

D. 函数组合默认的执行顺序是从右到左

6. 函子

A. 函子是一个特殊的容器(对象),这个容器内部封装一个值,通过 map 传递一个函数对值进行处理

B. MayBe 函子的作用是处理外部的空值情况,防止空值的异常

C. IO 函子内部封装的值是一个函数,把不纯的操作封装到这个函数,不纯的操作交给调用者处理

D.Monad 函子内部封装的值是一个函数(这个函数返回函子),目的是通过 join 方法避免函子嵌套