欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Functor

程序员文章站 2022-03-23 15:53:20
...

定义:是一个容器,也是个普通容器,实现了flapMap接口(map函数),在遍历每个值得时候生成新的对象。
这个过程是无副作用地、不可变的访问和修改操作。包裹不安全的值,提升代码健壮性。避免程序异常中断。
1、隔离不纯
2、合并判空逻辑
3、避免异常
4、支持函数组合
5、中心化逻辑,提供默认值

Functor

/**
 * 不能使用箭头函数
 * 箭头函数没有constructor和prototype
 * @constructor
 */
interface Functor<T> {
    (arg: T): T,

    of: any,
    prototype: object,
}

// 创建一个容器
const Functor = function <Functor>(val) {
    this.value = val;
}
// 添加of接口,省略new去创建
Functor.of = function (val) {
    // @ts-ignore
    return new Functor(val);
}
// 实现map接口
Functor.prototype.map = function (fn) {
    return Functor.of(fn(this.value));
}

const v = Functor.of(2);
const t = Functor.of({a: 1});
const r = Functor.of([1, 2]);

console.log(v, t, r);
// Functor { value: 2 } Functor { value: { a: 1 } } Functor { value: [ 1, 2 ] }
console.log(v.map((x)=> {
    return x * x
}).map((x)=> {
    return x + x;
}));
// Functor { value: 8 }

Maybe

集中管理无效数据的检查,可合并判空 但是无法详细的给出错误的位置

/**
 * MayBe函子
 * @param val
 * @constructor
 */
Functor.prototype.isNothing = function () {
	return this.value !== undefined && this.value !== null;
};
/**
 * 重写map函数
 * @param fn
 */
Functor.prototype.map = function (fn) {
	return this.isNothing() ? Functor.of(null) : Functor.of(fn(this.value));
};

// 测试代码
const n = Functor.of(null).map((v)=> {
	return v * 1;
}).map((v)=> {
	return v;
});
console.log(n); // Functor { value: null }

Either

从故障中恢复 可给出具体的错误位置 并可延迟抛出异常,使代码可正常执行​

相关标签: # 函数式