gpt4 book ai didi

java.lang.Optional 的 JavaScript 模拟?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:32:04 24 4
gpt4 key购买 nike

我正在寻找一个客户端 JavaScript 库,它可以让我使用某种类型的 Option 类型编写类似于我在其他语言中可以做的代码,例如 java.lang.Optional .

我的目标是避免在客户端代码中检查 null/undefined 并使 API 更明确。

这是我希望能够编写的 API:

var dictionary = {
key1: 'value1',
key2: 'value2'
}

function getValue(key){
var value = dictionary[key];
if(value !== null && value !== undefined)
return Optional.of(value);
else
return Optional.empty();
}

这是客户端代码:

var value = getValue('key3');
if(value.isPresent())
console.log('got a value: ' + value.get().toUpperCase());
else
console.log('no value found!');

或者有时:

var value = getValue('unknown key').orElse('default value');

如果我在 Optional.empty() 值上调用 get(),它应该会抛出某种错误。如果我在 nullundefined 上调用 Optional.of(),它也应该抛出。

最佳答案

考虑到 java.lang.Optional source,自己编写一个 Optional 实现应该不会那么难.

虽然你必须考虑一些差异,即 Javascript 区分 undefinednull,但你没有泛型这样的概念,并且考虑了 map 的 Java 实现被一些人称为broken .尽管如此,它还是相当容易实现的。

不过,我自己做了一个实现(optional.js),它适合我的需要,如果你愿意,你可以使用它,但它可能不能满足你所​​有的要求(即 of() 不会对 undefined 或 null 抛出异常,但 get() 会抛出异常)

用我的代码,你的例子就像

function getValue(key){
return Optional.of(dictionary[key]);
}

var value = getValue('key3');
value.ifPresent(function() {
console.log('got a value: ' + value.get().toUpperCase());
});

顺便说一句。像这样的代码

if(value.isPresent())
console.log('got a value: ' + value.get().toUpperCase());
else
console.log('no value found!');

不是 Optional 的有效用例,因为您可以轻松地替换它,它将进行 null/undefined 检查。但是,如果您需要像 filtermapflatMapifPresent 这样的方法,您将从

关于java.lang.Optional 的 JavaScript 模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32325726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com