相关疑难解决方法(0)

如何编写三元运算符(aka if)表达式而不重复自己

例如,像这样:

var value = someArray.indexOf(3) !== -1 ? someArray.indexOf(3) : 0
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来写这个?同样,我不是在寻找上面确切问题的答案,只是一个例子,说明何时可能在三元运算符表达式中重复操作数...

javascript conditional-operator

102
推荐指数
9
解决办法
1万
查看次数

Java"?" 检查null的运算符 - 它是什么?(不是三元!)

我正在阅读一篇关于斜线故事的文章,并发现了这个小小的问题:

采用最新版本的Java,它试图通过为无限指针测试提供简写语法来简化空指针检查.只需在每个方法调用中添加一个问号,就会自动包含对空指针的测试,替换大鼠的if-then语句嵌套,例如:

    public String getPostcode(Person person) {
      String ans= null;
      if (person != null) {
        Name nm= person.getName();
        if (nm!= null) {
          ans= nm.getPostcode();
        }
      }
      return ans
    } 

public String getFirstName(Person person) {
      return person?.getName()?.getGivenName();
    } 

我已经浏览了互联网(好吧,我花了至少15分钟在谷歌问号上搜索变种)并没有得到任何结果.所以,我的问题是:有关于此的官方文件吗?我发现C#有一个类似的运算符("??"运算符),但是我想得到我正在使用的语言的文档.或者,这只是我使用的三元运算符从未见过.

谢谢!

编辑:链接到文章:http://infoworld.com/d/developer-world/12-programming-mistakes-avoid-292

java syntax null

69
推荐指数
7
解决办法
10万
查看次数

使用Optional.ofNullable作为三元运算符的替代是一种好习惯吗?

考虑这个表达式的用法:

String hi = Optional.ofNullable(sayHi()).orElse("-");
Run Code Online (Sandbox Code Playgroud)

这有效地对应于这个三元表达式:

String hi = sayHi() != null ? sayHi() : "-";
Run Code Online (Sandbox Code Playgroud)

使用Optional.ofNullable方法调用是一种好习惯吗?或者只是额外的详细编码?


我认识到Optional.ofNullable实际上创建了一个变量并避免了sayHi()两次调用该方法.为了避免这个问题,你实际上可以创建一个额外的变量,但这会增加三元选项的详细程度:

String hi = sayHi();
hi = hi != null ? hi : "-";
Run Code Online (Sandbox Code Playgroud)

另一方面,Optional.ofNullablehi不是null额外Optional对象的情况下创建.所以肯定会有更多的开销.

因此,使用这种类型的构造来替换三元构造函数似乎有一些利弊.


顺便说一下:这是Java 8的实现Optional.ofNullable:

public static <T> Optional<T> ofNullable(T value) {
    return value == null ? empty() : of(value);
}
Run Code Online (Sandbox Code Playgroud)

java nullable optional java-8

10
推荐指数
4
解决办法
1191
查看次数

用三元避免违反DRY?

这就是我所拥有的。

Map data = new HashMap<>(); // assume this has been populated

public int getLastestVersion() {
    // data.get("PATH_TO_DESIRED_POINT") would be an integer
    return data.get("PATH_TO_DESIRED_POINT") == null ? 0 : (int)data.get("PATH_TO_DESIRED_POINT");
}
Run Code Online (Sandbox Code Playgroud)

我试图避免违反 DRY,但我希望能够保持三元的简单性。有什么我可以做的吗?

java dry ternary-operator

2
推荐指数
1
解决办法
62
查看次数