如果声明。仅使用括号一次

时间:2011-12-30 20:48:33

标签: php coding-style

if(true)
    if($i == 2)
        callMethodOne();
    elseif($i == 3)
        callMethodTwo();
    else
    {
        callMethods1();
        callMethods2();
        //so on
    }
else
    callMethodFiftyFive();      

不好吗?

7 个答案:

答案 0 :(得分:2)

我不会说它特别糟糕,特别是对于一个小的,孤立的脚本。但是当你开始使用更多的代码,更复杂的代码,更重要的是更多的程序员时,这样的事情会成为问题。

我建议你选择一个编码标准并尝试坚持下去。例如,PEAR已发布其编码标准:Manual :: Coding Standards

就个人而言,我至少在第一个区块周围包括括号:

if(true)
{                            // Added this
    if($i == 2)
        callMethodOne();
    elseif($i == 3)
        callMethodTwo();
    else
    {
        callMethods1();
        callMethods2();
        //so on
    }
}                            // Added this
else
    callMethodFiftyFive();

我只省略了单行的括号,如下所示:

if (foo)
    bar();

永远不要复杂,比如:

if (foo)
    if (baz)
        spam();
    else
        eggs();

因为很容易忘记你已经省略了括号,并在第一个“块”内添加了一些东西:

if (foo)
    NewCall();
    if (baz)       // WOAH! this now happens regardless of "if (foo)"!
        spam();
    else
        eggs();

答案 1 :(得分:1)

不,不是真的。省略括号时要小心,否则当你向ifelseif添加更多行时会遇到麻烦。

与往常一样,如果您在已经具有既定风格的环境中工作,请首先遵循该风格。有些群体希望callMethodOne()if位于同一行,而其他群体可能更喜欢您始终使用括号。只要保持一致,你应该没事。

答案 2 :(得分:1)

如果要将调试语句放在其中一个块中,可能会很烦人。或者拿一个。或者添加另一个函数调用。或者再次删除它。除非你是关于避免使用单行模块的OCD,否则它真的不值得这么麻烦。

答案 3 :(得分:1)

我避免使用 - 我唯一一次不使用大括号就是如果我有一个if和一条短then行的结果:

if (someThing) doSomethingElse();

否则我总是使用'​​em。

答案 4 :(得分:1)

计算机的合法性并不总是人类最容易理解的代码。

这种风格可能会导致错误。

考虑一下无支撑会发生什么 - 如果没有其他(或类似地,一个无支撑的其他),加上一个单一的声明。控制流程不是缩进所暗示的。

if(true)
    callMyOtherMethod()
    if($i == 2)
        callMethodOne();
    elseif($i == 3)
        callMethodTwo();
    else
    {
        callMethods1();
        callMethods2();
        //so on
    }

答案 5 :(得分:1)

我强烈建议在每个if / else语句中使用括号,无论它有多少行。它使它更具可读性。另外,如果您碰巧在if添加了额外的一行,那么您确定它会在应有的时候运行。

例如,这个例子会做什么?

if(true)
    callAnotherMethod();  // Uh oh
    if($i == 2)
        callMethodOne();
        callAnotherMethodAgain();  // What's gonna happen
    elseif($i == 3)
        callMethodTwo();
    else
    {
        callMethods1();
        callMethods2();
        //so on
    }
else
    callMethodFiftyFive();
    callThisOtherMethod(); // Oh no

使用括号,它是可读的,并且您100%确定正在进行的操作。

if(true)
{
    callAnotherMethod();  // :-)
    if($i == 2)
    {
        callMethodOne();
        callAnotherMethodAgain(); // :-)
    }
    elseif($i == 3)
    {
        callMethodTwo();
    }
    else
    {
        callMethods1();
        callMethods2();
        //so on
    }
}
else
{
    callMethodFiftyFive();
    callThisOtherMethod(); // :-)
}

答案 6 :(得分:0)

此代码唯一的问题是清晰度。假设你在每个if中都有大量的语句然后然后跟踪代码或干运行它会对你越来越难,因为你离开头更远