单行if语句或if语句没有括号不好的做法?

if (condition) { /* do something */ } else { /* do something */ } if (condition) /* do something */ else /* do something */ 

我被告知第一次不是一个好主意。 我不知道这是否真的是这种情况(或者对于第二种情况); 它不会缩短打字数量吗? 或者是因为它只是弄得一团糟?

最佳实践是编写其他人可以轻松阅读和更新的代码。

您的第一个表单是有问题的,因为它不遵循大多数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 */; 

请注意,这完全是关于标准做法,并不一定有意义 – 它只是关于其他开发人员习惯看到的内容。

更重要的是,你的第二种forms并不是那么好,因为它使另一个程序员很容易犯这个错误:

 if (condition) // code A else // code B // code C (added by another programmer) 

在这个例子中,另一个程序员添加了code C ,但忘了将整个else块包装在大括号中。 这会引起问题。 您可以通过简单地将ifelse块包装在大括号中来抵御这种情况。

我的偏好是否一致……所以:

 if(...) { statement 1; statement 2; } else { statement 1; statement 2; } 

没有什么不同于:

 if(...) { statement 1; } else { statement 1; } 

所以我总是使用它们,因为它是一致的,它避免了以后忘记添加它们的问题。

然而,其他人会查看我的代码并认为放入{和}是愚蠢的。 他们有他们的理由,我有我的…我碰巧喜欢我的理由而不是我喜欢他们的原因:-)

通常不可读的代码是一种不好的做法。 单行更有效地输入并保存行号,但是从现在开始一年或者在您扫描错误时再回到它,这将使它变得更加困难。

在我看来,是的,单行if语句是不好的做法。

计算机并不真正关心(据我所知),但你应该总是编写你的代码,它将由一个知道你住在哪里的连环杀手来维护。

可读! 轻松自我辨别。

我看到的问题是开发人员没有认识到{} -less- if他们何时将代码添加到其中一个条件中。 例:

 //before if(something) statement; //after if(something) statement; addedstatement; 

显然,这不会达到预期目的。

你有没有在C或C ++中看到这样的代码?

  /* Warning: bogus C code! */ if (some condition) if (another condition) do_something(fancy); else this_sucks(badluck); 

缩进是错误的,或者程序是错误的,因为“else”总是适用于最近的“if”,除非你使用大括号。

(我们只使用python。没有括号,只有纯净的空格。:P)

对于除最短语句之外的所有语句,请使用大括号并相应地对其进行分隔。 您想要这样做有几个原因:

  • 在某事情发生的地方犯错是很难的。

  • 它更容易阅读。

  • 在具有宏扩展function的语言(例如C,C ++)中,当包含多个语句的宏在未支持的if-else内扩展时,无法包含大括号将导致令人困惑的逻辑错误。

使用多行的一个主要好处是易于调试。 如果你在一行上都有一个if else语句并且调试器告诉你行x爆炸,那么确定语句的哪个部分失败就更加困难了。 多行还可以更轻松地使用调试器逐步执行代码。

那是两行长,所以不是一行。

单行代码没有问题,因为它使代码更容易阅读。

例如,像这样:

 if (last_item) print ", and " else print ", " 

好多了

 if (last_iem) { print ", and " } else { print ", " } 

这比其他任何东西都更具编码风格。 也就是说,我个人认为你的第二个例子可能是非常有害的。 在大括号是创建块的唯一方法的语言中,很容易意外地“向块中添加第二行”。 但是在PHP中,存在替代语法,这就更不可能引发必要的警告:

 if ($_GET["asdf"]==1): /* do something */ else: /* do something */ endif; 

经验法则:如果你要将你的“做某事”放在一个单独的行上,请使用大括号; 如果你不打算使用牙套,就把它放在同一条线上!

我看到很多第三方代码都有愚蠢的问题,我更喜欢一直使用大括号。 这说我从未感觉良好

 if(){} else (){} 

我在同一行使用if(){}当它是一个简短的指令而且它是独自的。 如果还有其他用途:

 if(checkSomething) { //dosomething } else { //doanotherthing } 

这是我在一段时间的就业考试中实际记得的事情。 代码类似于以下内容:

 if (x == 0) x = 2; else print("x is: %d", x); // debugging! x = 4; 

这里的大多数人都可以发现错误,但你可以真正替换你想要的任何东西作为插入的“坏代码”。 当你有一个注释掉的旧版本的旧版本时会出现更微妙的错误,并且有人不对它进行评论,并且突然第二个语句在块之外。

基本上,除非它是一个小型测试应用程序,以快速学习一个概念,我总是括号(甚至在我通常支持的测试应用程序中)。 如果我不这样做,即使是5行方法,也不值得头疼。

您应该将“if”和“do something”放在不同的行上,以使您的代码对交互式调试器更友好。

如果你把“if”和“do something”放在同一行上,那么就不能在“do something”行上设置一个断点。