如何评论if-else结构?

时间:2010-04-13 06:11:37

标签: coding-style comments

让我们说:

if(condition) {
    i = 1;
} else {
    i = 2;
}

您需要发表解释ifelse块的评论。什么是最易读的方式,以便有人可以在第一眼就轻松拿起它们?

我通常这样做:

//check for condition
if(condition) {
    i = 1;
} else {
    //condition isn't met
    i = 2;
}
由于评论位于不同的级别,我觉得不够好,所以快速浏览一下,您只需选择if评论,else评论看起来就属于某种内部结构。< / p>

把它们放在这样:

if(condition) {
    //check for condition
    i = 1;
} else {
    //condition isn't met
    i = 2;
}

对我来说也不好看,因为看起来整个结构没有被评论(条件可能很大并且需要多行)。

类似的东西:

//check for condition
if(condition) {
    i = 1;
//condition isn't met
} else {
    i = 2;
}
从评论的角度来看,

可能是最好的风格,但作为代码结构令人困惑。

你如何评论这些块?

PS。我不是要求重构这两行代码,只考虑代码样式和注释格式。

12 个答案:

答案 0 :(得分:30)

如果需要评论if else语句,我更喜欢描述使代码达到这一点的情况。 特别是在具有高圈复杂度的代码中

if (condition) { 
// User is taking a course at college x:
    i = 1;
} else { 
// User is not taking any course at college x:
    i = 2;
}

答案 1 :(得分:22)

另一种选择是:

if(condition) { //check for condition
    i = 1;
} else { //condition isn't met
    i = 2;
}

答案 2 :(得分:13)

您应该只注释代码是否不自我解释。所以,如果自我解释。像这样或许

bool fooIsNotReallyGood = ....;

if(fooIsNotReallyGood) {
...
} else {
...
}

答案 3 :(得分:10)

如果代码还没有自我记录,那么我会按如下方式构建它:

if (someCondition) {
    // If some condition, then do stuff 1.
    doStuff1();
}
else {
    // Else do stuff 2.
    doStuff2();
}

但同样,如果代码已经自我记录,则没有多大意义。如果你想添加评论,因为有一些复杂的条件,如:

if (x == null || x.startsWith("foo") || x.endsWith("bar") || x.equals("baz")) {
    doStuff1();
}
else {
    doStuff2();
}

然后我会考虑将其重构为:

boolean someCondition = (x == null || x.startsWith("foo") || x.endsWith("baz") || x.equals("waa");

if (someCondition) {
    doStuff1();
} else {
    doStuff2();
}

其中,变量名someCondition 实际上总结了整个条件。例如。 usernameIsValiduserIsAllowedToLogin左右。

答案 4 :(得分:5)

转到自我评论条件,然后不需要其他评论。假设条件是达到最大贷款价值。这给了我们:

if (maximumLoanToValueIsReached)
{
   i=1;
}
else
{
   i=2;
}

当i = 2时,无需指定尚未达到最大贷款价值,因为这是自我解释。另外,我还要将i重命名为更有意义的内容。

答案 5 :(得分:4)

我根本不会对这些特定情况发表评论 - 评论不会对您已经清晰的代码增加任何价值。如果你有一个非常复杂的条件难以阅读,我会考虑将它分解为一个函数(可能是inline),并且它的名称非常干净。

答案 6 :(得分:2)

//condition isn't met似乎是一个无用的评论。但是在需要这样的评论的情况下,我这样做(C#):

//check for condition
if(condition) 
{
    i = 1;
} 
//some other condition
else 
{
    i = 2;
}

但是,如果块只是if-else,那么我会在之前合并两个注释。

对于javascript,我更喜欢

//check for condition
if(condition) {
    i = 1;
} else { //some other condition
    i = 2;
}

P.S。似乎人们有很多意见:)

答案 7 :(得分:2)

这是我对if语句的评论,尽管我通常发现它不是必需的。我喜欢将它与if / else一致,并标记为相同的位置

if ( condition )    //if above the bar
{
    i = 0;
    k = 1;
}
else                //else if below
{
    i = 1;
    k = 2;
}

答案 8 :(得分:1)

变量很重要,而不是条件本身。

if condition: # <condition dependent variable> was <predicated>
  dosomething()
elif othercondition: # <othercondition dependent variable> <predicated>
  dootherthing()
else: # <all variables> <not predicated>
  doelsething()

答案 9 :(得分:1)

没有单一的答案 - 不同的人会对的可读性有不同的看法。但是,我认为有一致意见认为评论实际上应该为(否则是不言自明的)代码增加价值,并且评论风格应该是一致的。

我处理评论的方式不是立即自我解释的条件是这样的:

  // If the condition for a local tree imbalance is met,
  // juggle the immediate nodes to re-establish the balance.
  // Otherwise, execute a global balancing pass.
  if ( somewhat muddled condition )
  {
     ...code...
  }
  else // Tree is in local balance
  {
     ... more code...

  } // if/else (tree locally imbalanced) 

对最终'}'的评论主要是为了让条件的结束更具视觉权重,使阅读源更容易。

答案 10 :(得分:1)

评论非常个人化,而且(正如前面的一些答案所示)会产生与代码一样多的争论。

在简单的情况下,评论会减损代码。但假设情况更复杂,我更喜欢:

/*
** Comment explaining what the condition
** is trying to determine
*/
if ( condition )
{
    /*
    ** Comment explaining the implications
    ** of the condition being met
    */
    do_something();
}
else
{
    /*
    ** Comment explaining the implications
    ** of the condition not being met
    */
    do_something_else();
}

无论如何,评论不能只重复代码。

答案 11 :(得分:-3)

您可以将if-else代码提取到方法并正确命名:

function main() {
  checkForCondition(condition);
  conditionIsNotMet(condition);
}

function checkForCondition(boolean condition) {
  if (condition) {
    i = 1;
  }
}

function conditionIsNotMet(boolean condition) {
  if (!condition) {
    i = 2;
  }
}

在这种微不足道的情况下,这似乎有点矫枉过正,但想象每个if-else分支有多行。