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

时间:2009-03-27 21:16:29

标签: php c coding-style

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

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

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

12 个答案:

答案 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块包装在大括号中。这会引起问题。您可以通过简单地将ifelse块包裹在大括号中来抵御这种情况。

答案 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”行上设置一个断点。