单行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
块包装在大括号中。 这会引起问题。 您可以通过简单地将if
和else
块包装在大括号中来抵御这种情况。
我的偏好是否一致……所以:
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”行上设置一个断点。