if (condition) { /* do something */ }
else { /* do something */ }
if (condition)
/* do something */
else
/* do something */
我被告知第一次不是个好主意。我不知道这是否真的是这种情况(或者对于第二种情况);是不是缩短了打字数量?或者是因为它只是弄得一团糟?
答案 0 :(得分:34)
最佳做法是编写其他人可以轻松阅读和更新的代码。
您的第一个表单有问题,因为它不遵循大多数PHP开发人员习惯的表单:
if (condition) {
// code
} else {
// code
}
// ... or ...
if (condition)
{
// code
}
else
{
// code
}
// ... or ...
if (condition) { /* short code */ } else { /* short code */ }
// ... or ...
condition ? /* short code */ : /* short code */;
请注意,这完全是关于标准做法,并不一定有意义 - 它只是关于其他开发人员习惯看到的内容。
你的第二种形式,更重要的是,它不是那么好,因为它让另一个程序员很容易犯这个错误:
if (condition)
// code A
else
// code B
// code C (added by another programmer)
在此示例中,其他程序员添加了code C
,但忘记将整个else
块包装在大括号中。这会引起问题。您可以通过简单地将if
和else
块包裹在大括号中来抵御这种情况。
答案 1 :(得分:8)
我的偏好是为了保持一致......所以:
if(...)
{
statement 1;
statement 2;
}
else
{
statement 1;
statement 2;
}
与:
无异if(...)
{
statement 1;
}
else
{
statement 1;
}
所以我总是使用它们,因为它是一致的,它避免了以后忘记添加它们的问题。
然而,其他人会查看我的代码并认为放入{和}是愚蠢的。他们有他们的理由,我有我的...我喜欢我的理由而不是我喜欢他们的理由: - )
答案 2 :(得分:5)
通常不可读的代码是一种不好的做法。单行更有效地输入并保存行号,但是从现在开始一年或者在扫描错误时再回到它,这将使它变得更加困难。
在我看来,是的,单行if语句是不好的做法。
计算机并不在乎(据我所知),但是你应该总是编写你的代码,因为它将由一个知道你住在哪里的连环杀手来维护。
可读!轻松自我辨别。
答案 3 :(得分:4)
我看到的问题是开发人员没有认识到{} -less- if他们何时将代码添加到其中一个条件中。例如:
//before
if(something)
statement;
//after
if(something)
statement;
addedstatement;
显然,这不符合预期。
答案 4 :(得分:3)
你有没有在C或C ++中看到这样的代码?
/* Warning: bogus C code! */
if (some condition)
if (another condition)
do_something(fancy);
else
this_sucks(badluck);
缩进是错误的,或者程序是错误的,因为“else”总是适用于最近的“if”,除非你使用大括号。
(我们只使用python。没有括号,只有纯净的空格。:P)
答案 5 :(得分:1)
对于除最短语句之外的所有语句,请使用大括号并相应地对其进行分隔。你想这样做有几个原因:
在某些事情发生的地方犯错是很难的。
阅读起来比较容易。
在具有宏扩展功能的语言(例如C,C ++)中,如果在无支撑的if-else
内扩展包含多个语句的宏,则无法包含大括号将导致令人困惑的逻辑错误。
答案 6 :(得分:1)
使用多行的一个主要好处是易于调试。如果你在一行上都有一个if else语句并且调试器告诉你行x爆炸,那么确定语句的哪一部分失败就更加困难了。多行还可以更轻松地使用调试器逐步执行代码。
答案 7 :(得分:0)
这些是两行,所以不是一行。
单行if
在使代码更容易阅读时没有任何问题。
例如,像这样:
if (last_item) print ", and " else print ", "
比
好多了if (last_iem)
{
print ", and "
}
else
{
print ", "
}
答案 8 :(得分:0)
这是比其他任何东西更多的编码风格。也就是说,我个人认为你的第二个例子可能是非常有害的。在大括号是创建块的唯一方法的语言中,很容易意外“向块中添加第二行”。但是在PHP中,存在替代语法,这就更不可能引发必要的警告:
if ($_GET["asdf"]==1):
/* do something */
else:
/* do something */
endif;
经验法则:如果你要把你的“做某事”放在一个单独的行上,请使用大括号;如果你不打算使用大括号,请把它放在同一条线上!
答案 9 :(得分:0)
我看到很多第三方代码存在愚蠢的问题,我更喜欢一直使用大括号。那说我从未感觉良好
if(){}
else (){}
我在同一行使用if(){}当它是一个简短的指令而且它是独自的。如果有其他人使用long:
if(checkSomething)
{
//dosomething
}
else
{
//doanotherthing
}
答案 10 :(得分:0)
这是我在一段时间的就业考试中实际记得的事情。代码类似于以下内容:
if (x == 0)
x = 2;
else
print("x is: %d", x); // debugging!
x = 4;
这里的大多数人都可以发现错误,但您可以真正替换所需的任何内容作为插入的“错误代码”。当你有一个注释掉的旧版本的旧版本时会出现更微妙的错误,并且有人会对其进行注释,并且突然第二个语句在块之外。
基本上,除非它是一个小型测试应用程序,以快速学习一个概念,我总是括号(甚至在测试应用程序中我通常括号)。如果我不这样做,即使用5行方法,也不值得头疼。
答案 11 :(得分:0)
您应该将“if”和“do something”放在不同的行上,以使您的代码对交互式调试器更友好。
如果你把“if”和“do something”放在同一行上,那么就不能在“do something”行上设置一个断点。