编写“if”语句的不同方式

时间:2009-03-12 15:27:52

标签: c#

我已经看到了编写if语句的不同方法。

您更喜欢哪一个?为什么?

示例1:

if (val % 2 == 1){output = “Number is odd”;}else{output = “Number is even”;} 

示例2:

if (val % 2 == 1)
{
    output = “Number is odd”;
}
else
{
   output = “Number is even”;
}

示例3:

if (val % 2 == 1)
output = “Number is odd”;
else
output = “Number is even”;

示例4:

if (val % 2 == 1){
output = “Number is odd”;
} else {
output = “Number is even”;
}

类似的问题:

  

Why is it considered a bad practice to omit curly braces?

20 个答案:

答案 0 :(得分:47)

对于这样的情况,还有条件运算符:

output = (val % 2 == 1) ? "Number is odd" : "Number is even";

如果您肯定要使用“if”,我将使用版本2或版本4,具体取决于您的支撑样式的其余部分。 (在工作中我使用4;对于我使用的个人项目2.)主要的是,即使在单个陈述中也有括号。

BTW,为了测试奇偶校验,它的使用速度稍快:

if ((val & 1) == 1)

答案 1 :(得分:17)

版本2.我总是包含括号,因为如果您需要在条件下放置多行,则不必担心以后放置括号。这样,它确保所有if语句都具有相同的结构,这有助于您扫描某个if语句的代码。

答案 2 :(得分:12)

我使用版本2.

如果你没有其他的话,使用花括号的一个原因会变得更清楚。

if(SomeCondition)
{
  DoSomething();
}

如果您需要添加另一行代码,则不太可能出现问题:

if(SomeCondition)
{ 
  DoSomething();
  DoSomethingElse();
}

如果没有大括号,可能会完成此操作:

if(SomeCondition)
   DoSomething();
   DoSomethingElse();

答案 3 :(得分:9)

我个人更喜欢3.额外的花括号只会增加太多不必要的视觉噪音和空白。

我可以在某种程度上看到2/4减少错误的原因,但我个人从来没有过错,因为在if语句中考虑额外的行。我使用C#和visual studio,因此我的代码始终保持格式良好。如果我是一个记事本风格的程序员,这可能会成为一个问题。

答案 4 :(得分:5)

我更喜欢#2。易读性。

答案 5 :(得分:5)

以上都不是。

如果我的执行块只有一行(即使它是一个巨大的声明),那么我不使用大括号,但我缩进它,类似于#3

if (num > 3)
     print "num is greater than 3";
else
     print "num is not greater than 3";

一个不需要花括号的多个语句的例子:

if (num > 3)
    for (int i = 0; i < 100)
        print i + "\n";
else
    print "booya!";

那就是说,Jon Skeet在这个问题上的回答是最好的

答案 6 :(得分:3)

我同意三元运营商的意见。在我遇到的代码中使用得很少,而且我认为它比写出if / else语句所需的所有额外括号和缩进更容易和更好。

答案 7 :(得分:3)

保持一致比选择最佳更为重要。

这些样式具有不同的优点和缺点,但没有一个像在项目甚至编译单元或函数内混合它们一样糟糕。


三元运算符是此特定代码的明显选择。对于无法表达的简单单个语句if/else,我更喜欢正确缩进的情况3:

if (val % 2 == 1)
    output = “Number is odd”;
else
    output = “Number is even”;

我理解“总是使用大括号”背后的动机,但我个人从未被他们的遗漏所困扰(好的,一次。用宏。)

从上面的样式中,我选择(2)。 (4)如果“正确”缩进,则可以 (1)我要归功于一个年轻的开发人员,他希望能够从“紧凑的代码”中成长,或者是一个买不起体面的显示器的人。不过,如果它是当地的风格,我会继续使用它。

答案 8 :(得分:2)

我使用版本2.

答案 9 :(得分:2)

奇怪的是,没有人提到这一点:

if ( x == 1) {
   ...
}
else {
   ...
}

对我来说,这是唯一正确的方法,当然: - )

答案 10 :(得分:1)

就个人而言,我发现有两种方法是良好的做法:

对于if-blocks,只有这样:

if(...)
{
    // ...
}
else if (...)
{
    // ...
}
else
{
    // ...
}

这是编写if-else-blocks最安全,最易理解的方法。

对于一个衬垫(在一条线上可以理解的真正的一个衬垫),您可以使用三元运算符。

var objectInstance = condition ? foo : bar;

// Or the binary operator when dealing with null values
var objectInstance = condition ?? foo;

您不应该调用那些无法帮助当前分配的方法。

我不会使用除上述之外的任何其他方式。

答案 11 :(得分:0)

建议使用大括号,我已经看到if else语句没有大括号的一些问题,(我不记得确切),即如果没有执行if语句,当我添加相同的大括号然后只有工作。 (使用Visual Studio&amp; C#4.0)。

答案 12 :(得分:0)

单一简短陈述:

if (condition) output = firstChoice;
else doSomethingElse();

多个或长语句

if (condition) {
   output = firstChoice;
   ...
} else {
   ...
}

答案 13 :(得分:0)

版本#2对我来说 - 最容易看,最容易阅读,很容易看到if开始和结束的位置,对于其他相同,如果你想添加多个语句,你不必担心放入括号。

答案 14 :(得分:0)

我使用#2进行微小改动

if (condition1) 
{
      doStuff();
} else 
{
      doSomethingElse();
}

答案 15 :(得分:0)

我个人更喜欢第2版。但是因为它只是形成它并不重要。使用最适合您和您的团队成员!

答案 16 :(得分:0)

我总是使用#2。 #4是一个非常糟糕的布局,只能由那些认为方法必须是一个屏幕大小并且会做任何事情来填充它而不是重构代码的人来完成!

答案 17 :(得分:0)

我会按以下顺序使用它们: 1)三元运算符 2)示例3,但缩进正确 3)2或4,它们基本相同。我会选择我工作的一般风格。

我同意杰克所说的省略不必要的花括号。我从来没有引起或看到由添加新代码引起的错误,有人认为它们是if语句的一部分,但它们并不是因为缺少花括号。如果有人这样做过,我会毫不留情地嘲笑他们。

你必须折磨我让我使用1号。

答案 18 :(得分:0)

示例2毫无疑问是最不容易出错的方法。请查看我给similar question的答案,原因如下:

What is the prefered style for single decision and action statements?

虽然Visual Studio默认的大括号用法是将大括号放在换行符上(我的首选方法),但Krzysztof Cwalina和Brad Abrams的Framework Design Guidelines书(第一版)提出了一个不同的约定,例如4,放置前面if语句末尾的左括号(页284)。他们还声明“避免省略大括号,即使语言允许它。”

手头没有second edition,我不知道这些约定是否已经改变。

答案 19 :(得分:0)

我更喜欢自己4,但我认为2也绝对是好的。