如何评论一个if-else结构?
可以说你有:
if(condition) { i = 1; } else { i = 2; }
你需要把解释if
和else
块的意见。 什么是最可读的方式,让人们可以轻松地乍一看?
我通常这样做:
//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
实际上总结了整个条件。 如usernameIsValid
, userIsAllowedToLogin
等等。
去自我评论的条件,然后额外的意见是没有必要的。 假设条件是达到了最大的贷款价值。 这给了我们:
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
分支有多于一行。