[英]java ternary operator can be replaced with Math.max call
我有以下代碼delay = (delay>200)? delay: 200;
delay = (delay>200)? delay: 200;
Java
發出警告消息Can be replaced with 'Math.max' call
。
在這里我看到Math.max(a, b)
實際上與(a > b)? a: b
(a > b)? a: b
所以三元運算符不比Math.max
差
那么,如果通過Math.max
方法調用替換三元運算符沒有優勢,為什么Java
發出此警告消息?
我懷疑這是一個真正的編譯器警告,可能是一些 IDE 檢查/警告。
盡管如此,你是對的,沒有硬性的技術理由來選擇一個而不是另一個。
但是:從人類讀者的角度來看,使用Math.max()
有一個主要優勢:更容易閱讀和理解。 就這么簡單。
此外:除非必須,否則不要重復代碼。
永遠記住:您為人類讀者編寫代碼。 編譯器接受任何語法正確的東西。 但是對於您的人類讀者來說,條件和分配與非常有說服力的“取兩個數字的最大值”之間存在差異。
Math.max(a, b)
比 tenary 語句更具可讀性,因為:
200
不需要重復。>
一般來說,三元更強大,因為它可以讓你做這樣的事情:
delay = (delay>200) ? 200 : delay;
delay = (delay<200) ? delay : 200;
delay = (delay>200) ? delay: 300;
您的代碼的讀者需要了解您實際在做什么。 解析它並理解它是一個簡單的max()
需要時間。
max
更清楚地顯示了您的意圖。
除了現有答案之外,如果下限(在您的情況下為 200)不是常數而是派生值,則可能會帶來性能優勢:
delay = (delay > readLimitFromFile()) ? delay : readLimitFromFile();
當一個操作就足夠時,這最終可能會執行 2 次昂貴的磁盤讀取操作。 使用 Math.max:
delay = Math.max(delay, readLimitFromFile());
將只使用一次磁盤讀取操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.