2016-11-09 180 views
0

我正在審查一些Java代碼與這條線我不明白

if (list.size() == 1 || list.size() <= 4) {...} 

我評論,我看不出這是剛剛做

if (list.size() <= 4) {...} 

他說有什麼不同的區別它很重要,需要成爲第一個。我不明白。也許,如果它是像

if (list.size() == 1 || list.size() <= someVeryCostlyFunction()) {...} 

和規模預計爲1的大部分時間,你可能同時使用,如果someVeryCostlyFunction()總是返回一些正數> = 1。否則我看不到區別。我們應該檢查效率。

+3

'「它很重要,需要成爲第一個」 - 這聽起來不像是一個令人信服的答案。我不會在那些無法解釋他們爲什麼要這樣做的人的行爲中投入太多資源。 – David

+0

那麼你必須計算'list.size()'一次初學者... –

+0

「需要是第一個」我的意思是第一個例子與兩個條件,而不是第二個只有一個條件 – Tony

回答

1

代碼smells與兩個條件:

if (list.size() == 1 || list.size() <= 4) 

也許筆者有幾點:

如果在4以下列表中的元素一定數目。

即使列表中有零個元素,哪個最有可能是錯誤的,它還可以滿足條件。

此情況的另一個問題是使用magic number 4?
關於它的重要性以及爲什麼它不是5

int MAX_HANDLED = 4; 
if (list.size() > 0 && list.size() <= MAX_HANDLED) 
: 
: 
int ALL_TIRES = 4; 
if (car.getTires() < ALL_TIRES) { 
    car.stop(); 
} 

至於性能,我看不出有任何顯著原因,現有的條件應該是更快了,然後你提出一個(甚至: 應當自來自可能出現在代碼中的其他4的記載和尊貴第二個會更快,當list.size > 1)。看到類似關注的這個question

+0

我現在看到他想要提醒,如果大小> 4,但你仍然不需要== 1.你確實需要一個> 0,但我想你會得到斷言錯誤是大小== 0:WebElement ele = lists.get(0)。將給出一個斷言(或大小= 0 ind = 0或其他) – Tony

+0

如果已經有一個空列表的斷言,那麼你不需要首先檢查。所以你提出的檢查應該足夠了。 – MaxZoom