函数式编程
2025-03-27 17:28:55 0 举报
函数式变成整理
作者其他创作
大纲/内容
Either 函子
Monad函子通过变扁的方式解决函子嵌套
以管道的方式将细粒度的函数组合而成,充分发挥了函数可重用的特性
把不纯的操作交给调用者来处理
以下概念是函数式编程的前置条件
并行处理
两者中的另一个,类似于if...else...的处理方式
柯里化
异步任务的实现过于复杂,可以使用 folktale 中的 Task
IO函子中的_value是一个函数
函数式编程理念
将多元函数转换成一元函数,可以组合使用函数,产生强大的功能
函数是一等公民
可能会有硬编码
由于纯函数和柯里化容易导致洋葱代码h(g(f(x))),使用组合,将经过柯里化的细粒度函数组合成一个新的函数
MayBe 函子
可以把函数作为另一个函数的返回值
由这三个前置条件,引出纯函数
好处
高阶函数
纯函数
函数的形参太多(多元函数),没有办法进行太多的组合,变化不多
IO 函子
可以让我们给一个函数传递较少的参数,得到一个已经缓存了一些固定参数的新函数(对函数参数进行缓存)
函数可以存储在变量中
可测试(因为测试就是要断言,需要的就是这种输入输出)
异常会让函数变得不纯,Either函子可以用来处理异常
Point Free编程风格1. 不需要指明处理的数据2. 只需要合成运算过程3. 需要定义一些辅助的基本运算函数
MayBe函子针对Functor函子进行了改进,可以处理外部传入的空值情况(控制副作用在允许的范围内)
在IO函子中,当出现函数嵌套时,如IO(IO(x)),调用会变得很不方便,因此会出现._value()._value()这种写法。Monad则是对IO函子进行了增强。
函数可以作为参数
Functor 函子
Pointed函子是实现了of静态方法的函子
可缓存(因为相同的输入总是得到相同的输出,所以可以把纯函数的结果缓存起来)
Pointed函子
Monad函子
函子
增加了 join 和 of方法。join: 获取_value()的值of:返回一个新的IO函子
由于纯函数存在不足,使用柯里化来增强这些功能
容器: 包含值和值的变化关系(这个变化关系就是对象)
函数可以作为返回值
可以在内部函数中调用外部函数中的变量,从而延长变量的作用域
不足
函子:是一个特殊的容器,通过一个不同的对象来实现。这个对象应该具有map方法,map方法可以运行一个函数对值进行处理(变形关系)
IO函子可以将不纯(异步、文件操作等)的动作存储到_value中,延迟执行这个不纯的操作(惰性执行)
of方法是为了避免使用New来创建对象,更深层的含义是of方法用来把值放到上下文Context(把值放到容器中,使用map包装方法来处理,不对外暴露值)
Functor主要引出了这两个概念
以上到函数组合为止都是函数式编程的基础,但是没有解决如何控制副作用、异常处理、异步操作等问题
函数组合
让函数变得更灵活,让函数的粒度更小
闭包
可以把函数作为参数传给另一个函数
0 条评论
下一页