[英]java ternary operator and lazy evaluation
我試圖一勞永逸地簡化一個常見條件:
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);
}
顯然,其中t1
和t2
是等效的。
有沒有一種方法,使用運算符優先級,以表達不使用三元運算符和評估條件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);
但除此之外:使用三元運算符沒有任何問題。
如果我希望代碼更易於閱讀,我寧願這樣:
private boolean isIllegalAction(execution,sourceStep,currentStep){
return execution.isActive() ? !Objects.equals(sourceStep, currentStep) : sourceStep != null;
}
if(isIllegalAction(...)){
//do something
}
我的問題是關於可讀性與效率
很好。
考慮:
int result = (myObject.isCompleted())
? myObject.getStandardError()
: myObject.computeStandardError().getStandardError();
... 相比:
int result = 0;
if (myObject.isCompleted()) {
result = myObject.getStandardError();
}
else {
result = myObject.computeStandardError().getStandardError();
}
我會說內聯的if-then-else更具可讀性,不是嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.