2011-10-21 46 views
1
//first 
if(num % 2 == 0) { 
    isEven = true; 
} 


//second 
isEven = (num %2 == 0); 

什麼是最好的做法,並且是第一種情況的代碼異味?這兩個代碼片段中哪一個更好

+3

當任務滿足時,永不分支。 –

+1

當可讀,可維護/分配足夠時,永不分支。只是在那裏添加,因爲人們有時會把「硬規則」變爲極端:) – RHSeeger

+1

您可以消除括號 - 'isEven = num%2 == 0;' –

回答

7

他們不會做同樣的事情 - 如果num是奇數,則第一次將isEven與先前的值相關聯,第二次將其設置爲false

我想:

  • 嘗試初始化在聲明中對變量,而不是改變它之後。
  • 使用第二種形式優先於第一種形式。

if塊體是只是設置變量,其值可以表示爲一些簡單修改if塊的狀況,你總是要設置一些價值,我只會使用簡單的作業。

同樣爲return語句 - 我寧願有:

return (num % 2 == 0); // Or (num & 1 == 0) 

if (num % 2 == 0) { 
    return true; 
} else { 
    return false; 
} 
2

,無需瞭解周圍的情況下任何東西,這兩個版本實際上在它們的語義不同。

如果num是偶數,第一個版本將只更改值isEven。後者版本將總是更新值爲isEven。所以我肯定會喜歡後者,因爲它確保isEven擁有有用的語義價值。