简介
在之前的文章中已经介绍过函数式编程了,但是没有演示在函数式编程中如何把副作用控制在可控的
范围内、如异常处理、异步操作等,接下来为大家揭晓谜题
什么是Functor(函子)
容器:包含值和值的变形关系(这个变形关系就是函数)
函子:是一个特殊的容器,通过一个普通的对象来实现,该对象有map方法,
map方法可以运行一个函数对值进行处理(变形关系)
演示如下
class Container {
constructor(value) {
this._value = value
}
map(fn) {
return new Container(fn(this._value))
}
}
const result1 = new Container(5).map(data => data + 5).map(data => {
console.log(data); //10
return data
});
console.log(result1); //Container { _value: 10 }
class Container2 {
static of(value) {
return new Container2(value)
}
constructor(value) {
this._value = value
}
map(fn) {
return Container2.of(fn(this._value))
}
}
const result2 = Container2.of(20).map(data => data + 20).map(data => {
console.log(data); //40
return data
})
console.log(result2); //Container2 { _value: 40 }
总结
1、函数式编程不直接操作值,而是由函子完成
2、函子就是一个实现了map契约的对象
3、我们可以把函子想象成一个盒子,这个盒子封装了一个值,
4、想要处理盒子中的值,我们需要给盒子的map方法传递一个处理值的函数(纯函数),由这个函数来对值进行处理
5、最终map方法返回一个包含新值的盒子(函子)
谢谢观看!!!