我通常会一直按照
的方式编写条件代码if (number==1)
name="a";
if (number==2)
name="b";
无论多短,虽然我找到了相当多的人写作
if (number==1) name ="a";
if (number==2) name ="b"...
对我而言,这似乎不一致,实际上使代码看起来更麻烦。
这样做的最佳方式是什么?
答案 0 :(得分:17)
编码风格是最激烈争论的主题之一(通常具有宗教热情)。 关于这个问题有很多资源,我会尝试找到这些链接。
无论哪种方式,我都喜欢用花括号包裹每一个这样的身体;我的经验是,如果添加或省略线条,它们会使身体更加明显,并降低出错的风险。
答案 1 :(得分:8)
我更喜欢你的第一个选择,但更好的是:
if (number == 1) {
name = "a";
}
if (number == 2) {
name = "b";
}
在简单的视图中稍微长一些,但是当if大于一行时,我不必添加括号(通常,我认为)
答案 2 :(得分:7)
我总是写同样的条件:
if (number == 1)
{
name = "a";
}
else if (number == 2)
{
name = "b";
}
易于阅读和一致。与包含多个语句的if语句一致......
为了扩展这一点,我尝试遵循这条规则:
每一行都做一件事。
也就是说,每一行应该执行一个语句(范围应该很容易看到)。所以我不喜欢:
if (number==1) name ="a";
因为在一行上发生了两件事,这使得阅读和调试比应该更加困难。所以我会转到:
if (number==1)
name ="a";
但是这有一个问题,即如果与多语句不一致。这就是为什么(正如其他人所说的那样)将括号括在事物上是好的:
if (number==1)
{
name ="a";
}
我更喜欢“{”的原因是,当我扫描代码时,我可以快速识别范围的开始和结束位置。它也遵循一个声明规则,因为'if'和'{'执行if语句并且启动一个新范围。
我不认为,“它可以节省垂直空白”是一个很好的理由,可以跳过可读性和良好的格式化(两个{}在同一列==性感)。这是因为考虑到今天显示器的分辨率,您不需要努力查看代码。
答案 3 :(得分:2)
我更喜欢:
if (number==1) {
name="a";
}
if (number==2) name="b";
每当我使用支架时,我都会开始换行。
答案 4 :(得分:2)
我使用以下风格。
if (number == 1)
{
name = "a";
}
else if (number == 2)
{
name = "b";
}
如果您插入新行,这可以避免错误。
if (number == 1)
DoSomething();
name = "a";
现在name = "a";
不再是有条件的。目前我正在考虑改用以下风格。
if (number == 1) {
name = "a";
}
这样文本结构更能反映出控制结构,但我仍然在考虑这个问题。
答案 5 :(得分:2)
我坚信,如果你要在条件之后将声明置于一条线上,请用括号括起来。给出一个@ Daniel的观点的具体例子,如果我正在调试它:
if (number==1) name="a"; if (number==2) name="b";
......我会非常想要这样做:
if (number==1) print "Hit the first conditional\n"; name="a"; if (number==2) print "No, hit the second conditional\n"; name="b";
......随后出现了运行时的欢闹。
我偶尔会将单行命令放在与“if”语句相同的行上,如果它是明显而简单的,比如“if(inputVar == null)return;”。但作为一般规则,如果我缩进单个命令(而不是跨越多行的单个大命令)*,我总是希望它们用括号括起来。我不会那么麻烦。
* - 好的,从技术上讲,那些单命令if语句确实是跨越多行的单个命令。但是如果我不小心在多行方法调用的中间插入一个命令,编译器会在我太困惑之前进行barf。
答案 6 :(得分:2)
就我个人而言,我喜欢在一条线路上设置条件,IF,只有如果有一组我想比较它们。
if (iTerm >= Ps.missed_runs) iTerm -= Ps.missed_runs;
else if (iTerm <= Ps.missed_runs) iTerm += Ps.missed_runs;
else iTerm = 0;
在这里,我可以清楚地看到什么是相同的,什么是不同的。与此相比:
if (iTerm >= Ps.missed_runs) {
iTerm -= Ps.missed_runs;
} else if (iTerm >= Ps.missed_runs) {
iTerm += Ps.missed_runs;
} else {
iTerm = 0;
}
现在比较远离彼此,并且没有与列对齐。人们很难发现一个错误。
P.S。您是否注意到第二个代码示例中的故意错误?
雨果
答案 7 :(得分:2)
Python几乎迫使你,所以是的 - 条件代码总是在新的一行。
if number == 1:
name = "a"
elif number == 2:
name = "b"
else:
raise ValueError()
答案 8 :(得分:1)
我也这样做(在java中)并且我总是添加大括号,即使它只有一行,它根本不起作用并且消除了一个经典的bug来源。
答案 9 :(得分:1)
这当然纯粹是一种风格问题。一般来说,额外的空间是舒适的。但是,有时候将这些东西压缩起来似乎是合适的。一般来说,我只会在变量赋值时执行此操作,而不是其他任何操作。
我总是喜欢让代码看起来像,这意味着,单个if语句应该总是看起来一样。我通常甚至会在括号中留下,所以很明显是什么。
答案 10 :(得分:1)
我只使用第一个选项。更容易阅读,更容易在条件中设置断点。
答案 11 :(得分:1)
我将总是把它放在另一条线上,但我有点灵活。如果代码在同一行上更具可读性,因为行中的许多语句非常相似,我可能会在一行上进行以帮助证明相似性,但我会寻找一种消除相似性的方法通过重构来改变。
答案 12 :(得分:1)
将条件放在一行时,我使用单行格式:
toggled = (on == true ) ? true : false;
但是,如果您有多个案例,我可能会使用switch语句,这不起作用:
switch ( number ) {
case 1: a;
break;
case 2: b;
break;
a;
}
对于您的具体示例,我会这样做:
if ( number == 1 ) {
name = "a";
} else if ( number == 2 ) {
name = "b";
}
我喜欢值和括号之间的额外空间,因为它通过突出显示它们来帮助保持一切清洁。
答案 13 :(得分:0)
它在代码可读性方面的差异可以忽略不计,无论你想做什么。编写好的代码,让IDE弄清楚它应该是什么样的。
答案 14 :(得分:0)
Microsoft C#Best Practices声明对单行条件使用花括号。我个人认为这更具可读性。当适合语言时,我倾向于使用其他语言的习惯。
if (myVar == 0)
{
return false;
}
答案 15 :(得分:0)
好的,我需要一些downvotes。这真的很难看,但我认为这有一个很好的理由:
if (false){}
else if (variable == aValue){
... code ...
}
else if (variable == anotherValue){
... code ...
}
... more cases ...
else {
... code ...
}
原因是没有任何分支(else
除外)与其他分支不同,因此很容易重新排序或在开头插入新分支。
事实上,如果我从另一个程序生成这个代码,它确实简化了生成器。