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