MayBe 函子的作用就是可以对外部的空值情况做处理(控制副作用在允许的范围)
class MayBe {static of (value) {return new MayBe(value)}constructor (value) {this._value = value}map(fn) {// 判断一下value的值是不是null和undefined,如果是就返回一个value为null的函子,如果不是就执行函数return this.isNothing() ? MayBe.of(null) : MayBe.of(fn(this._value))}// 定义一个判断是不是null或者undefined的函数,返回true/falseisNothing() {return this._value === null || this._value === undefined}}const r = MayBe.of('hello world').map(x => x.toUpperCase())console.log(r) //MayBe { _value: 'HELLO WORLD' }// 如果输入的是null,是不会报错的const rnull = MayBe.of(null).map(x => x.toUpperCase())console.log(rnull) //MayBe { _value: null }
但是这里有一个问题就是,如果map中间有好几步,最后返回是null,并不知道是哪一个步骤返回的。解决这个问题,需要看Either函子。
