您是否将条件代码放在新行上或仅在有时?

时间:2009-04-22 21:34:44

标签: layout

我通常会一直按照

的方式编写条件代码
if (number==1) 
    name="a";
if (number==2)
    name="b";

无论多短,虽然我找到了相当多的人写作

if (number==1) name ="a";
if (number==2) name ="b"...

对我而言,这似乎不一致,实际上使代码看起来更麻烦。

这样做的最佳方式是什么?

16 个答案:

答案 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除外)与其他分支不同,因此很容易重新排序或在开头插入新分支。

事实上,如果我从另一个程序生成这个代码,它确实简化了生成器。