2011-10-21 31 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拥有有用的语义价值。