函子_一个木函是干嘛的

函子_一个木函是干嘛的函子的作用: 在函数式编程中把副作用控制在可控范围内,函子也可以做异常处理,异步操作等。 什么是Functor(函子) 1. 容器:包含值和值的变形关系(这个变形关系就是函数) 2. 函子: 特殊的容器,通过一个普通的对象实现,这个对象具有map方法,map方法接收一个参数, 这个参数是一个纯函数,

函子的作用:  在函数式编程中把副作用控制在可控范围内,函子也可以做异常处理,异步操作等。

什么是Functor(函子)

1. 容器:包含值和值的变形关系(这个变形关系就是函数)

2. 函子: 特殊的容器,通过一个普通的对象实现,这个对象具有map方法,map方法接收一个参数,

这个参数是一个纯函数,可以对值进行处理, 返回一个新的函子,新函子中保存了当前对值处理的结果,

新函子中又有一个map方法,你可以再给这个map传入一个新函数继续操作(也就是链式调用)

函子_一个木函是干嘛的
函子_一个木函是干嘛的

 1 // Functor函子
 2 class Container {
 3   //函子接收一个值
 4   constructor(value) {
 5     // 将这个值保存在内部变量_value中
 6     this._value = value;
 7   }
 8 
 9   //接收一个函数fn
10   map(fn) {
11     /**
12      * 返回的是一个新的函子,新函子接收的参数就是fn对内部变量_value处理后的新值,
13      * 然后这个新值被保存在新函子中 */
14     return new Container(fn(this._value));
15   }
16 }
17 
18 /**第一次map, 返回一个新函子,保存的值为6,其中有一个map方法,
19  * 第二次map,返回另一个新函子,保存的值为 6 * 6 = 36
20  */
21 let r = new Container(5).map((e) => e + 1).map((x) => x * x);
22 
23 console.log(r);

functor

结果

函子_一个木函是干嘛的

 

 

 

当然不想实例化,可以使用静态方法来初始化实例

函子_一个木函是干嘛的
函子_一个木函是干嘛的

 1 class Container {
 2     static of(value) {
 3         return new Container(value)
 4     }
 5 
 6     constructor(value) {
 7         this._value = value
 8     }
 9 
10     map(fn) {
11         return Container.of(fn(this._value))
12     }
13 }
14 // 测试
15 const newFunctor = Containers.of(3)
16   .map((x) => x + 2)
17   .map((x) => x * x);
18 
19 console.log(newFunctor);

View Code

结果

函子_一个木函是干嘛的

 

想象一下你传入null 或者undefined,  会发生什么

函子_一个木函是干嘛的
函子_一个木函是干嘛的

1 const newFunctor = Containers.of(undefined)
2   .map((x) => x + 2)
3   .map((x) => x * x);
4 
5 console.log(newFunctor);

View Code

函子_一个木函是干嘛的

 

 会出现异常,所以我们需要用到Maybe函子

 

今天的文章函子_一个木函是干嘛的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/54691.html

(0)
编程小号编程小号
上一篇 2023-08-28
下一篇 2023-08-29

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注