gpt4 book ai didi

java三元运算符和惰性求值

转载 作者:行者123 更新时间:2023-12-01 18:04:43 26 4
gpt4 key购买 nike

我试图一劳永逸地简化一个常见条件:

public static void main(String[] args)
{
boolean a = true;
boolean b = false;
boolean c = true;

boolean t1 = (a && b) || (!a && c);
boolean t2 = a ? b : c;

System.out.println(t1);
System.out.println(t2);
}

显然,t1t2 是等价的。

有没有一种方法,使用运算符优先级来表达条件,而不使用三元运算符并仅评估 a 一次?

谢谢

<小时/>

现实世界的例子:

if(execution.isActive() ? !Objects.equals(sourceStep, currentStep) : sourceStep != null)
{
throw new IllegalStateException("current action is not allowed to be executed");
}

其中 execution.isActive() 是一项昂贵的操作。

就我的口味而言,这根本不可读...我必须停下来想一想,这不是立竿见影的。

我的问题是关于可读性效率

最佳答案

在现实生活中,如果 a 实际上是一次昂贵的调用的结果,我只需将其提取到一个变量中。

更改此:

boolean t1 = (expensiveCall() && b) || (!expensiveCall() && c);

对此:

boolean result = expensiveCall();
boolean t1 = (result && b) || (!result && c);

但除此之外:我认为使用三元运算符没有任何问题。

关于java三元运算符和惰性求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37562868/

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