也许是JavaScript中的monad

Maybe monad in JavaScript

本文关键字:monad 中的 JavaScript 也许      更新时间:2023-09-26

在monads的例子中,也许在npm上我们有:

function find(collection, predicate) {
  for (var i = 0; i < collection.length; ++i) {
    var item = collection[i]
    if (predicate(item))  return Maybe.Just(item)
  }
  return Maybe.Nothing()
}

有人可以解释一下Maybe.Just(item);Maybe.Nothing()实际上在做什么吗?

换句话说,monads 本质上是否将对象用作返回值,这些返回值实现了能够定义函数调用序列的特定接口?

可能用于表示可能失败的操作。

在此函数的情况下,如果元素满足谓词,则返回Just(the element),否则,返回Nothing以显示它已"失败"(在这种情况下,没有一个元素满足谓词)。

最好只返回 null,因为返回类型显式显示它可能会失败,并且答案可以与模式匹配。

Monads 是抽象容器,具有一个 API 来操作其中包含的数据。在选项 monad 的例子中,我认为它是一个礼品盒,要么有礼物,要么是空的。将数据包装在Maybe.Just()中表示此容器确实包含数据,同时它将返回值维护为Maybe。然后,find()方法的调用方可以执行以下操作:

var userPredicate = function(user) { return user.name === 'billy bob'; };
var users = collections.getUsersCollection();
var maybeData = find(users, userPredicate);
if(maybeData.isJust()) {
    // there was data...do something with it
} else {
    // no data...do something else
}

另一方面,Maybe.Nothing()表示缺少数据(上面示例中的 else 部分)。理想情况下,您将像这样包装数据:var maybeData = Maybe(data)然后对此进行操作,传递它等。这是向任何收到此对象的人发出的信号,他们需要有意识地处理丢失数据的情况。

披露:我正在开发一个名为Giftbox的类似库,它具有更丰富的API。查看那里的自述文件以获取更多解释,以帮助您了解什么是 Option monad 以及如何有效地使用它。

这里有一篇描述Monads,Applicatives和Functors的文章可能对你有用。