使用不带括号的if语句是不好的做法?

我看过这样的代码:

if(statement) do this; else do this; 

我不喜欢那个,我觉得这个更干净,更可读

 if(statement){ do this; }else{ do this; } 

这只是一个偏好的问题,还是会推荐一种方法?

第一个版本的问题是,如果你回过头去添加第二个语句到if或else子句而没有记住添加大括号,你的代码将会以意想不到的方式破解。

可维护性方面,使用第二种forms总是比较聪明的。

编辑:Ned在评论中指出了这一点,但我认为这也值得链接到这里。 这不只是一些象牙塔假想的废话: https : //www.imperialviolet.org/2014/02/22/applebug.html

留下陈述块的一个问题是别的含糊。 这是C启发式语言忽略缩进,所以没有办法分离这个:

 if(one) if(two) foo(); else bar(); 

由此:

 if(one) if(two) foo(); else bar(); 

我的一般模式是,如果它符合一行,我会做:

 if(true) do_something(); 

如果还有一个else子句,或者我想要在true上执行的代码长度很长,那么就一直使用括号:

 if(true) { do_something_and_pass_arguments_to_it(argument1, argument2, argument3); } if(false) { do_something(); } else { do_something_else(); } 

最终,这归结为风格和可读性的主观问题。 但是,一般的编程世界几乎分为两个方面(对于使用花括号的语言):或者无时无刻地使用它们,或者一直使用它们,例外。 我是后者的一部分。

我正在使用我使用的IDE的代码格式化程序。 这可能会有所不同,但可以在首选项/选项中进行设置。

我喜欢这一个:

 if (statement) { // comment to denote in words the case do this; // keep this block simple, if more than 10-15 lines needed, I add a function for it } else { do this; } 

从第一个时刻开始使用大括号应该有助于防止您无需debugging:

 if (statement) do this; else do this; do that; 

所有if语句都使用大括号,即使是简单的。 或者,重写一个简单的if语句来使用三元运算符:

 if (someFlag) { someVar= 'someVal1'; } else { someVar= 'someVal2'; } 

看起来好像这样:

 someVar= someFlag ? 'someVal1' : 'someVal2'; 

但是只有使用三元运算符,如果你确定没有其他东西需要在if / else块中去的话!

我更喜欢使用大括号。 添加大括号使读取和修改更加容易。

以下是一些使用大括号的链接:

  • 更喜欢多行if

  • 省略大括号:不只是一个风格的问题

  • 堆栈溢出

这是一个偏好的问题。 我个人使用两种风格,如果我有理由相信我不需要添加任何语句,我使用第一种风格,但如果可能的话,我使用第二种风格。 既然你不能再给第一种风格添加语句,我听说有人build议不要使用它。 然而,第二种方法会产生额外的代码行,如果您(或您的项目)使用这种编码风格,则第一种方法对于简单的if语句是非常优选的:

 if(statement) { do this; } else { do this; } 

不过,我认为这个问题的最佳解决scheme是在Python中。 使用基于空白的块结构,您不会有两种创buildif语句的不同方法:只有一个:

 if statement: do this else: do this 

虽然这确实有一个“问题”,你根本不能使用大括号,但你获得的好处是,没有更多的线条,第一种风格,它有权力添加更多的陈述。

我个人使用的第一种风格只是抛出一个exception或过早从方法返回。 就像在函数开始时的参数Checking一样,因为在这种情况下,我很less有一件事情要做,而且从来没有别的。

例:

 if (argument == null) throw new ArgumentNullException("argument"); if (argument < 0) return false; 

否则,我使用第二种风格。

根据我的经验,第一种forms的唯一(非常)轻微的优点是代码可读性,第二种forms增加了“噪音”。

但是对于现代IDE和代码自动生成(或自动完成),我强烈build议使用第二种forms,不要花费额外的时间input大括号,并且会避免一些最常见的错误。

有足够的能源消耗的错误,人们只是不应该打开大门的时间浪费。

编写代码时要记住的一个最重要的规则是一致性。 无论是谁写的,每行代码都应该用同样的方式写。 严格防止错误“发生”;)

这与清楚明确地指定variables,方法,文件或正确缩进它们是一样的。

当我的学生接受这个事实时,他们停止与自己的源代码作斗争,他们开始将编码视为一个非常有趣,刺激和创造性的活动。 他们挑战他们的思想,而不是他们的神经!

我遵循的“规则”是这样的:

如果“if”语句正在testing以执行某些操作(IE调用函数,configurationvariables等),请使用大括号。

 if($test) { doSomething(); } 

这是因为我觉得你需要在什么条件下明确哪些function被调用以及程序的stream向在哪里。 让程序员明确地知道调用哪些函数以及在这种情况下设置哪些variables对于帮助他们准确理解你的程序正在做什么非常重要。

如果“if”语句正在testing以停止执行某项操作(循环或函数中的IEstream量控制),则使用单行。

 if($test) continue; if($test) break; if($test) return; 

在这种情况下,对程序员来说很重要的一点就是快速发现exception情况是不希望代码运行的地方,这些都在$ test中被覆盖,而不是在执行块中。

我一直试图使我的代码标准化,看起来尽可能接近相同。 这使得其他人在更新它时更容易阅读它。 如果你做的第一个例子,并在中间添加一条线,它会失败。

不会工作:

如果(声明)这样做; 和这个; 否则做这个;

我同意大多数答案,最好是在你的代码中明确地使用大括号。 就我个人而言,我会采用一套编码标准,确保团队中的每个人都了解并遵守。 在我工作的地方,我们使用IDesign.net为.NET项目发布的编码标准。

我个人的偏好是使用这样的空白和括号的混合:

 if( statement ) { // let's do this } else { // well that sucks } 

我认为这看起来干净,使我的代码非常容易阅读,最重要的是 – debugging。

我更喜欢摆一个大括号。 但有时候,三元运算符可以帮助。

代替 :

 int x = 0; if (condition) { x = 30; } else { x = 10; } 

一个应该简单地做: int x = condition ? 30 : 20; int x = condition ? 30 : 20;

另外想象一下:

 if (condition) x = 30; else if (condition1) x = 10; else if (condition2) x = 20; 

如果你把大括号放进去,会好很多。