我见过像这样的代码:
if(statement)
do this;
else
do this;
不过,我认为这样更易读:
if(statement){
do this;
}else{
do this;
}
既然两种方法都可以工作,那么这只是个人偏好的问题,还是有一种方法比另一种更值得推荐?
我见过像这样的代码:
if(statement)
do this;
else
do this;
不过,我认为这样更易读:
if(statement){
do this;
}else{
do this;
}
既然两种方法都可以工作,那么这只是个人偏好的问题,还是有一种方法比另一种更值得推荐?
第一种写法存在的问题是,如果你在if或else子句中添加第二个语句时忘记添加花括号,你的代码将以意想不到且有趣的方式崩溃。
从可维护性的角度来看,始终使用第二种形式更明智。
编辑:Ned在评论中指出了这一点,但我认为在这里也值得链接一下:https://www.imperialviolet.org/2014/02/22/applebug.html
if (…) { goto L; goto L; }
但是忘记了加上大括号。这只是巧合,因为“if (…) { goto L; goto L; }
”仍然存在缺陷(只是没有安全后果的缺陷)。在另一个例子中,情况可能会相反,不使用大括号的代码可能会意外地安全。在第三个例子中,不使用大括号的代码最初可能没有缺陷,但是开发人员在添加大括号时可能会出现拼写错误。 - Pascal Cuoq省略语句块的问题之一是 else 的歧义性。也就是说,受到 C 语言启发的语言忽略缩进,因此无法区分以下内容:
if(one)
if(two)
foo();
else
bar();
从这个开始:
if(one)
if(two)
foo();
else
bar();
else
会贪心地绑定到最近、最内层的if
上。问题出现在那些编写 C 或类似语言的人身上,他们不知道这一点,没有考虑到这一点,或者还没有喝足够的咖啡 - 所以他们编写的代码可能会执行他们认为的某个操作,但语言规范却要求解析器执行完全不同的操作。是的,这是另一个坚如磐石的理由,支持始终包括大括号,即使语法将它们标记为理论上“不必要”的情况。 - underscore_d我的通用做法是,如果它适合一行,我会这样做:
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();
}
归根结底,这取决于主观的风格和易读性问题。然而,在使用花括号的语言中,程序员们通常分成两派:要么总是使用它们而没有例外,要么总是使用它们但有例外。我是后者中的一员。
if(true){ do_something(); }
很容易,但为什么要冒险让另一个程序员在以后的开发中引入严重的错误呢(可以查阅苹果公司的“goto fail” SSL代码问题)? - Craig Tullis我遵循的“规则”是:
如果“if”语句是为了做某事而进行测试(例如调用函数、配置变量等),则使用大括号。
if($test)
{
doSomething();
}
这是因为我认为您需要明确调用哪些函数以及程序的流程在什么条件下进行。让程序员完全了解在这种情况下调用了哪些函数以及设置了哪些变量,对于帮助他们准确理解您的程序正在做什么非常重要。if($test) continue;
if($test) break;
if($test) return;
在这种情况下,对程序员来说重要的是快速发现那些异常情况,即你不希望代码运行的情况,而这些情况都在 $test 中涵盖,而不是在执行块中。
我正在使用我所用的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;
}
从一开始就正确使用括号应该有助于防止您需要调试这个问题:
if (statement)
do this;
else
do this;
do that;
;
键时,拥有一个能够自动修正代码缩进的IDE是非常方便的 :) - Sam Harwell}
呢?这个缺失的大括号会立即引起我的注意。只有Python开发人员才会犯这种错误。如果在C中的代码没有新作用域的迹象,那么它通常被用来表示上一行的延续,即使上一行是else
。 - Mecki即使是简单的if语句也要使用花括号。或者重写一个简单的if语句,使用三目运算符:
if (someFlag) {
someVar= 'someVal1';
} else {
someVar= 'someVal2';
}
这样看起来更加美观:
someVar= someFlag ? 'someVal1' : 'someVal2';
但是仅在您确信没有其他内容需要放入if/else块时,才使用三元运算符!
这是个人喜好的问题。我个人会两种风格都使用,如果我确认不需要再添加语句,就使用第一种风格,否则我使用第二种风格。由于第一种风格无法再添加语句,我听说有些人建议不要使用它。但是,第二种方法会增加一行代码,如果你(或你的项目)使用这种编码风格,第一种方法在简单的if语句中非常受欢迎:
if(statement)
{
do this;
}
else
{
do this;
}
然而,我认为解决这个问题的最佳方法是使用Python。由于基于空格的块结构,您不会有两种不同的创建if语句的方法:只有一种:
if statement:
do this
else:
do this