JavaScript模拟java.lang.Optional?

前端之家收集整理的这篇文章主要介绍了JavaScript模拟java.lang.Optional?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

我的目标是避免客户端代码中的空/未定义检查并使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(),它应该抛出某种错误.
如果我在null或undefined上调用Optional.of(),它也应该抛出.

最佳答案
鉴于java.lang.Optional source,自己编写一个Optional实现应该不会那么难.

虽然您必须考虑一些差异,即JavaScript区分undefined和null,但您没有Generics这样的概念,并且某些人认为map的Java实现为broken.然而,它实现起来相当容易.

但是,我自己完成了一个实现(optional.js),它适合我的需要,如果你愿意,你可以使用它,但它可能不满足你的所有要求(即()()不会在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检查.但是如果你需要像filter,map,flatMap和ifPresent这样的方法,那么你将从中受益更多.

猜你在找的Java相关文章