因此我知道,总是在if,for等中包含花括号被认为是一种好的做法,即使它们是可选的,如果只有一个后面的语句,因为它更容易意外地执行以下操作:
if(something == true) DoSomething(); DoSomethingElse();
如果你没有把括号快速编辑代码.
虽然这样的事情怎么样:
if(something == true) { DoSomething(); }
这样你仍然占用更少的线(IMO提高了可读性)但仍然不太可能从上面意外地犯错误?
我问,因为我不相信我以前见过这种风格的if或循环,但我确实看到它用于C#属性中的getter和setter,如:
public string Name {get;set;}
不要问什么是最好的,因为这太主观了,而只是这是否被认为是可接受的风格,如果不是,为什么不.
当我遇到一行if语句时,我通常跳过卷曲并将所有内容保持在同一行:
if (something == true) DoSomething();
它快速,简单,节省空间.
代替:
if(something == true) { DoSomething(); }
做这个:
if(something == true) { DoSomething(); }
我倾向于在自己的行上打开括号,如下所示:
if (condition) { statement; statement; }
所以看到类似的东西:
if (condition) statement; statement;
立即脱颖而出.如果我只有一个陈述,我就把它留下来
if (condition) statement;
如果我有一个额外的声明要添加,请将括号放入.我真的没有看到任何混淆的余地.
将语句放在与条件相同的行上是一个坏习惯,因为在调试时,大多数调试器将整个事件计为一行.(我意识到在C#中并非如此).
如果你在团队中工作,你需要提出一个标准.
我个人喜欢这样做:
if(foo) DoSomething();
要么
if(foo) DoSomething();
我没有看到没有牙套的问题.人们引用的原因,你提到的关于在下面的行中添加另一个陈述的那个,是我从来没有参与过的.
很多人建议将两者放在一条线上.这可能会增加可读性,但代价是我认为调试能力下降.我已经通过这种方式编写了大量代码,因此调试起来更加困难.
一些调试器和IDE可能能够跨越单行 - if
语句的两个部分并清楚地显示条件是否为真,但许多其他调试器可能将其视为单行,因此很难确定是否为if
-声明被称为.
例如,用于C++代码的VS2008调试器将作为单行执行此操作,因此很难确定是否调用了Foo().
if (a==b) { Foo(); }
就个人而言,我喜欢我所有的块都有相同的模式.我总是使用ifs的大括号,他们总是开始新的一行.我喜欢自动定义放置{get;的公共属性的习语.组; 在同一条线上.我只是觉得所有的块都以自己的支撑开始,提高了可读性.正如其他人所指出的那样,如果你跨越线路,它也会使调试器更清晰.
如果你不同意,那也没关系,但正如其他人所说的一致.为此,您可能希望在您和您的同事之间共享"代码格式"设置,以便自动格式化使每个人都能保持一致.
我会做:
if (something) { DoSomething(); }
和
public string MyProperty { get; set; }