Coding style 如何评论if-else结构?

Coding style 如何评论if-else结构?,coding-style,comments,Coding Style,Comments,假设你有: if(condition) { i = 1; } else { i = 2; } 您需要在if和else块中添加注释来解释。最具可读性的方法是什么,这样人们第一眼就能很容易地找到它们 我通常是这样做的: //check for condition if(condition) { i = 1; } else { //condition isn't met i = 2; } if(condition) { //check for con

假设你有:

if(condition) {
    i = 1;
} else {
    i = 2;
}
您需要在if和else块中添加注释来解释
。最具可读性的方法是什么,这样人们第一眼就能很容易地找到它们

我通常是这样做的:

//check for condition
if(condition) {
    i = 1;
} else {
    //condition isn't met
    i = 2;
}
if(condition) {
    //check for condition
    i = 1;
} else {
    //condition isn't met
    i = 2;
}
  // 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) 
我发现这还不够好,因为注释位于不同的级别,所以快速浏览一下,您只需选择
if
comment,而
else
comment看起来像是属于某个内部结构

这样说:

//check for condition
if(condition) {
    i = 1;
} else {
    //condition isn't met
    i = 2;
}
if(condition) {
    //check for condition
    i = 1;
} else {
    //condition isn't met
    i = 2;
}
  // 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) 
对我来说也不太好,因为整个结构似乎没有注释(条件可能很大,需要多行)

诸如此类:

//check for condition
if(condition) {
    i = 1;
//condition isn't met
} else {
    i = 2;
}
从注释的角度来看,这可能是最好的样式,但作为一个代码结构,它会令人困惑

你如何评价这些障碍


PS.我不是在问重构这两行代码,只是问代码样式和注释格式

在这些特殊情况下,我根本不会评论——这些评论不会给您已经清晰的代码增加任何价值。如果你有一个很难理解的复杂的情况,我会考虑把它分解成一个函数(可能是代码>内联),它自己的名字很干净。

< P>你只应该注释,如果代码不是自解释的。因此,让if不言自明。也许是这样

bool fooIsNotReallyGood = ....;

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

//条件未满足
似乎是一条无用的注释。但如果需要这样的评论,我会这样做(C#):

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

对于javascript,我更喜欢

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

注:似乎有很多人也有很多意见:)

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

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

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

function conditionIsNotMet(boolean condition) {
  if (!condition) {
    i = 2;
  }
}
在这样一个简单的情况下,这似乎是一种过分的做法,但请想象一下,如果else
分支中有多行代码。

另一个选项是:

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

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

if condition: # <condition dependent variable> was <predicated>
  dosomething()
elif othercondition: # <othercondition dependent variable> <predicated>
  dootherthing()
else: # <all variables> <not predicated>
  doelsething()
如果条件:#为
dosomething()
elif其他条件:#
dootherthing()
其他:#
doelsething()

这就是我如何对if-then语句进行注释的方法,尽管我通常发现它是不需要的。我喜欢将其与if/else对齐,并将其切换到同一位置

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

选择自评条件,则不需要额外的评论。假设条件是达到最大贷款价值比。这给了我们:

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

当i=2时,无需指定未达到最大贷款价值比,因为这是自我解释。另一方面,我还想将
I
重命名为更有意义的名称。

如果需要注释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;
}

没有单一的答案——不同的人会对什么是最可读的有不同的看法。然而,我认为大家一致认为,注释实际上应该为代码增加价值(否则是不言自明的),并且注释风格应该是一致的

我处理非即时自解释条件的注释的方式如下:

//check for condition
if(condition) {
    i = 1;
} else {
    //condition isn't met
    i = 2;
}
if(condition) {
    //check for condition
    i = 1;
} else {
    //condition isn't met
    i = 2;
}
  // 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) 

最后一个“}”上的注释的存在主要是为了给条件的结束赋予更多的视觉权重,使通过源代码的阅读更容易。

如果代码还没有自文档化,那么我将按如下方式构造它:

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
实际上概括了整个条件。例如,
usernameIsValid
userIsAllowedToLogin
等等。

评论在很大程度上是个人的事情,并且(从前面的一些答案中可以看出)与代码一样会引起争论

在简单的情况下,注释会影响代码。但假设条件更复杂,我更喜欢:

/*
** 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();
}

无论如何,注释不能只是重复代码。

这是我喜欢的选项。。。除非评论很长,否则你就完蛋了。。。。。。我很沮丧,删除了评论,因为它看起来很难看。在我看来+1是最好的解决方案。这就是我所做的。如果评论很长,那么在条件上面放一个评论块来解释整个事情。我喜欢所有的评论都从同一个位置开始(最好是从顶层开始)。让它们到处都是对我来说是很难理解的。对我来说,“检查条件”是没有帮助的,无论是它本身还是作为一个普通的占位符。注释必须是有帮助的,而不仅仅是重复代码,因此我倾向于(在下面详细说明)“注释解释条件试图确定的内容”,对于所有这些文本,问题绝不是快速的:-)谢谢你问这个问题,我一直在想,也是。我认为这应该重新打开——这是一个关于编码风格的问题,可以根据专业知识来回答。哈哈,在这种情况下,这样做不是更好吗?如果(条件)条件集();else条件不满足();这段代码有很多问题。首先,在
main()
中,两个函数之间的“非此即彼”关系(始终只有一个函数会生效)被模糊了。你必须在几个地方查阅实际的陈述,不要马上看是否有任何副作用。您还需要检查两次,这可能会很昂贵。它还增加了两个函数调用的开销,这两个函数调用可能还需要将某些内容返回到
main
-我知道答案是旧的,但我认为以某种方式支持反对票不会有什么坏处。+1我尽我所能让我的代码无需注释就可以理解。谢谢,但问题不是什么是abo