如何评论一个if-else结构?

可以说你有:

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

你需要把解释ifelse块的意见。 什么是最可读的方式,让人们可以轻松地乍一看?

我通常这样做:

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

我觉得这不是很好,因为评论是在不同的层面上的,所以你只要看看评论和else评论就会看起来像属于某种内部结构。

把他们这样的:

 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; } 

从评论的angular度来看可能是最好的风格,但作为代码结构混淆。

你如何评论这样的块?

PS。 我不是在重构这两行代码,只是关于代码风格和注释格式。

如果需要对其他语句进行评论,我更愿意描述一下代码到底是什么情况。 特别是在具有高回圈复杂度的代码中

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

另一个select是:

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

如果代码不是自我解释的,你应该只注释。 所以,如果自我解释。 也许这样

 bool fooIsNotReallyGood = ....; if(fooIsNotReallyGood) { ... } else { ... } 

如果代码还没有自行logging,那么我会按如下方式构build它:

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

但是,如果代码已经自行logging,那么这也没有什么意义。 如果您想添加评论,因为一些复杂的条件,如:

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

其中variables名someCondition 实际上总结了整个条件。 如usernameIsValiduserIsAllowedToLogin等等。

去自我评论的条件,然后额外的意见是没有必要的。 假设条件是达到了最大的贷款价值。 这给了我们:

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

没有必要指定什么时候我= 2最大的贷款价值还没有达到,因为这是自我解释。 另外,我也会把我改名为更有意义的东西。

我不会在这些特定的情况下发表评论 – 这些评论不会对你已经明确的代码增加任何价值。 如果你有一个非常复杂的条件难以阅读,我会考虑把它分解成一个函数(可能是inline ),并且有一个非常干净的名字。

这是我如何做我的意见,如果然后发言,虽然我通常发现它是不需要的。 我喜欢把它与if / else一致,并且选中到同一个地方

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

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

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

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

对于JavaScript我更喜欢

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

PS似乎有很多人的意见:)

variables是重要的,而不是条件本身。

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

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

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

  // 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) 

对最后的'}'的评论主要是为了让情况的结束更加直观,使阅读更容易。

评论是非常个人的事情,并且(从以前的一些答案中可以看出)引起了与代码一样多的争论。

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

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

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

您可以将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分支有多于一行。