函数式编程
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 条评论
 下一页