Dea*_*n J 17 maintainability coding-style
作为代码标准文档的一部分,我写了一段时间,我强制执行"你必须总是使用大括号循环和/或条件代码块,甚至(特别是)如果它们只是一行."
例:
// this is wrong
if (foo)
//bar
else
//baz
while (stuff)
//things
// This is right.
if (foo) {
// bar
} else {
// baz
}
while (things) {
// stuff
}
Run Code Online (Sandbox Code Playgroud)
如果你不支持单行,然后有人评论出来,那你就麻烦了.如果你不支持单行,并且缩进在其他人的机器上显示不相同......你就麻烦了.
所以,问题:为什么这会是一个错误的或其他不合理的标准有充分的理由吗?有一些讨论,但没有人能给我一个比"感觉难看"更好的反驳.
Ada*_*wen 22
我可以提供最好的反驳是,通过空间占用多余的线(S)减少的代码,你可以在同一时间看到你可以一次看量,代码量是多么容易的一大因素它是发现错误.我同意你给括号括起来的原因,但是在C++的多年里,我只能想到有一次我犯了一个错误的结果而且我在没有充分理由跳过括号的地方无论如何.不幸的是,我无法告诉你是否看到那些额外的代码行在实践中有所帮助.
我也许更偏向因为我喜欢在相同缩进级别匹配的括号的对称性(和所包含的语句的隐含分组为执行中的一个块) -这意味着添加括号所有的时间增加了很多线到项目.
Pet*_* H. 21
我强制执行这一点,if if语句的一些小例外,它们评估为返回或继续循环.
所以,根据我的标准,这是正确的:
if(true) continue;
Run Code Online (Sandbox Code Playgroud)
就是这样
if(true) return;
Run Code Online (Sandbox Code Playgroud)
但规则是它要么是回归,要么是继续,而且它们都在同一条线上.否则,支撑一切.
理由是为了有一个标准的方法,并避免你提到的评论问题.
Mik*_*one 11
我认为这条规则太过分了.严厉的标准并不能成为优秀的程序员,他们只是降低了一个混乱的可能性.
您提供的示例是有效的,但它们比强制括号有更好的解决方案:
如果你不支持单行,然后有人评论出来,那你就麻烦了.
两种做法更好地解决了这个问题
1)注释出if,while一衬垫与所述一个衬垫之前,等等.就是对待
if(foo)
bar();
Run Code Online (Sandbox Code Playgroud)
与任何其他多行语句一样(例如,具有多行的赋值或多行函数调用):
//if(foo)
// bar();
Run Code Online (Sandbox Code Playgroud)
2)前缀//为;:
if(foo)
;// bar();
Run Code Online (Sandbox Code Playgroud)
如果你不支持单行,并且缩进在其他人的机器上显示不相同......你就麻烦了.
不你不是; 代码工作原理相同,但更难阅读.修复你的缩进.挑选标签或空格并坚持使用它们. 不要混合标签和空格进行压痕. 许多文本编辑器会自动为您解决此问题.
写一些Python代码.这将至少解决一些不良的缩进习惯.
此外,像} else {我的TIE战斗机的nethack版本看起来像结构.
有充分的理由说明为什么这会是错误的或其他不合理的标准?有一些讨论,但没有人能给我一个比"感觉难看"更好的反驳.
冗余括号(和括号)是视觉混乱.视觉混乱使代码更难阅读.更难的代码是阅读,隐藏错误越容易.
int x = 0;
while(x < 10);
{
printf("Count: %d\n", ++x);
}
Run Code Online (Sandbox Code Playgroud)
强制括号无助于在上面的代码中找到错误.
PS我是"每个规则都应该说为什么"学校的订阅者,或者正如达赖喇嘛所说的那样,"了解规则以便你可以正确地打破它们."
我还没有任何人想出一个不总是使用花括号的好理由.
这些好处远远超过我所听到的任何"感觉丑陋"的原因.
存在编码标准以使代码更易于阅读并减少错误.
这是一个真正得到回报的标准.
我站在地上,根据缩进,牙箍应该匹配.
// This is right.
if (foo)
{
// bar
}
else
{
// baz
}
while (things)
{
// stuff
}
Run Code Online (Sandbox Code Playgroud)
至于你的两个例子,我认为你的可读性稍差,因为找到匹配的右括号可能很难,但在缩进不正确的情况下更易读,同时允许更容易地插入逻辑.这不是一个巨大的差异.
即使缩进不正确,if语句也会执行下一个命令,无论它是否在下一行.不将两个命令放在同一行上的唯一原因是调试器支持.