MayBe函子竟有如此妙用?快get起来!

今天看到一个好玩的东西,它就是MayBe函子,它能使我们能够以函数式的方式处理代码中的错误,写条博客记录一下顺便分享给大家哈!

MayBe函数定义

const MayBe = function (val) {
    this.value = val;
}

MayBe.of = function (val) {
    return new MayBe(val);
}

MayBe是一个能持有数据的函子,它将实现一个map函数

MayBe.prototype.isNothing = function() {
  return (this.value === null || this.value === undefined);
};
MayBe.prototype.map = function(fn) {
  return this.isNothing() ? MayBe.of(null) : MayBe.of(fn(this.value));
};

MayBe 的map 在应用传入的函数之前先使用 isNothing 函数检查容器中的值是否为 null 或 undefined :

(this.value === null || this.value === undefined);

如果结果是true,MayBe将返回null,否则返回后面的函数结果

简单实例

我们简单的创建一个 MayBe :

MayBe.of("abcd").map((x) => x.toUpperCase())

结果一目了然,就是:

MayBe { value: 'ABCD' }

如果我们把 abcd 改成 null 会怎样呢:

MayBe.of(null).map((x) => x.toUpperCase())

结果是:

MayBe { value: null }

代码并没有崩溃,因为我们已经把值封装到了一个安全容器 MayBe 中,它不会抛出任何错误,只是返回了 MayBe.of(null)

注意

  • 即使给 map 传入返回 null 或 undefined 的函数,MayBe 也可以处理
  • 所有的 map 函数都会被调用,无论它是否接收到 null 或 undefined

看一个例子:

MayBe.of("word")
     .map( () => undefined )
     .map( (x) => "hello" + x )

运行上面的代码将会得到结果:

MayBe { value: null }

这里的重点是,即使第一个 map 函数返回了 undefined,第二个 map 仍然会被调用!它也会返回 undefined ,因为前一个 map 返回了 null/undefined ,只是不应用传入的参数!

以上就是今天分享给大家的内容了,不要忘了点赞呀!晚安啦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章