编写“if”语句的不同方式
我已经看到了编写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”; }
类似的问题:
为什么省略花括号被认为是一种不好的做法?
对于这样的情况,还有条件运算符:
output = (val % 2 == 1) ? "Number is odd" : "Number is even";
如果你肯定会使用“if”我将使用版本2或版本4,这取决于你的支撑风格的其余部分。 (在工作中我使用4;对于我使用的个人项目2.)主要的是即使在单个语句周围也有括号。
顺便说一句,为了测试奇偶校验,使用起来稍微快点:
if ((val & 1) == 1)
版本2.我总是包含括号,因为如果您需要在条件下放置多行,则不必担心以后放置括号。 这样,它确保所有if语句具有相同的结构,这有助于扫描某个if语句的代码。
我使用的是版本2。
如果你没有其他的话,使用花括号的一个原因会变得更清楚。
if(SomeCondition) { DoSomething(); }
如果您需要添加另一行代码,则不太可能出现问题:
if(SomeCondition) { DoSomething(); DoSomethingElse(); }
没有大括号你可能会这样做:
if(SomeCondition) DoSomething(); DoSomethingElse();
我个人更喜欢3.额外的花括号只会增加太多不必要的视觉噪音和空白。
我可以在某种程度上看到2/4减少错误的原因,但我个人从来没有过错,因为在if语句中考虑额外的行。 我使用C#和visual studio,因此我的代码始终保持格式良好。 如果我是一个更加记事本风格的程序员,这可能是一个问题。
以上都不是。
如果我的执行块只有一行(即使它是一个巨大的声明),那么我不使用大括号,但我缩进它,类似于#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在这个问题上的回答是最好的
我更喜欢#2。 易读性。
我同意三元运营商的意见。 在我遇到的代码中使用得很少,而且我认为它比写出if / else语句所需的所有额外括号和缩进更容易和更好。
保持一致比选择最佳更为重要。
这些样式具有不同的优点和缺点,但没有一个像在项目甚至编译单元或函数内混合它们一样糟糕。
三元运算符是此特定代码的明显选择。 对于简单的单个语句if/else
的无法表达,我更喜欢正确缩进的情况3:
if (val % 2 == 1) output = “Number is odd”; else output = “Number is even”;
我理解“总是使用大括号”背后的动机,但我个人从未被他们的遗漏所困扰(好的,一次。用宏。)
从上面的样式,我选择(2)。 (4)如果“正确”缩进,则可以。
(1)我要归功于一个年轻的开发人员,他希望能够从“紧凑的代码”中成长,或者是一个买不起体面监视器的人。 不过,如果是当地风格,我会选择它。
我使用的是版本2。
很奇怪,没有人提到这个:
if ( x == 1) { ... } else { ... }
对我来说,这是唯一正确的方法,当然:-)
就个人而言,我发现有两种方法是良好的做法:
对于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;
您不应该调用那些无法帮助当前分配的方法。
我不会使用除上述之外的任何其他方式。
我更喜欢自己4,但我认为2也绝对是好的。
我将按以下顺序使用它们:1)三元运算符2)例3,但正确缩进3)2或4,它们基本相同。 我会选择我工作的一般风格。
我同意杰克所说的省略不必要的花括号。 我从来没有引起或看到由添加新代码引起的错误,有人认为它们是if语句的一部分,但它们并不是因为缺少花括号。 如果有人这样做过,我会毫不留情地嘲笑他们。
你不得不折磨我让我使用1号。
我总是使用#2。 #4是一个真正糟糕的布局,只能由一个人认为方法必须是一个屏幕大小的长度并且会做任何事情来填充它,而不是重构代码!
我个人更喜欢第2版。但是因为它只是形成它并不重要。 使用哪个最适合您和您的团队成员!
我使用#2进行了微小的改动
if (condition1) { doStuff(); } else { doSomethingElse(); }
对我来说版本#2 – 最容易看到,最容易阅读,很容易看到if开始和结束的位置,对于其他情况相同,如果你想添加多个语句,你不必担心放入括号。
单一简短陈述:
if (condition) output = firstChoice; else doSomethingElse();
多个或长语句
if (condition) { output = firstChoice; ... } else { ... }
建议使用大括号,我已经看到if else语句没有大括号的一些问题,(我不记得确切)ie下的语句如果没有执行,当我添加相同的大括号然后只有工作。(使用Visual studio&C#4.0)。
毫无疑问,示例2是最不容易出错的方法。 请看我给出类似问题的答案,原因如下:
单一决策和行动声明的首选风格是什么?
虽然Visual Studio默认的大括号用法是将大括号放在换行符上(我的首选方法),但Krzysztof Cwalina和Brad Abrams提出的框架设计指南书(第一版)提出了一个不同的约定,例如4,将左大括号放在前面的if
语句的结尾(页284)。 他们还说“ 避免省略括号,即使语言允许它”。
没有第二版 ,我不能说这些公约是否已经改变。