【问题标题】:If statments. Using brackets only once [closed]如果语句。只使用一次括号[关闭]
【发布时间】:2011-12-30 20:48:33
【问题描述】:
if(true)
    if($i == 2)
        callMethodOne();
    elseif($i == 3)
        callMethodTwo();
    else
    {
        callMethods1();
        callMethods2();
        //so on
    }
else
    callMethodFiftyFive();      

不好吗?

【问题讨论】:

  • 随便你或公司说什么。
  • 试试吧!如果它有效,并且您可以遵循它,那很好。如果它看起来令人困惑(它没有)或者它不起作用(它起作用),那么它很糟糕。
  • 我的钱有点恶心 :) 但这是一个完全主观的问题,所以没有正确的答案。
  • @Dan:只有当你是独狼时,它才会起作用;)

标签: php coding-style


【解决方案1】:

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

我建议您选择一个编码标准并尝试遵守它。例如,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();

【讨论】:

    【解决方案2】:

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

    与往常一样,如果您在已经确立风格的环境中工作,请先遵循该风格。一些组更喜欢callMethodOne()if 在同一行,而其他组可能更喜欢你总是使用括号。只要保持一致,就应该没问题。

    【讨论】:

      【解决方案3】:

      如果您想在其中一个块中放置调试语句,可能会很烦人。或者拿出一个。或者添加另一个函数调用。或者再次删除它。除非你是避免单行块的强迫症,否则真的不值得麻烦。

      【讨论】:

        【解决方案4】:

        我避免使用大括号 - 我唯一不使用大括号的情况是,如果我有一个 if 和一个简短的单行 then 结果:

        if (someThing) doSomethingElse();
        

        否则我总是使用它们。

        【讨论】:

          【解决方案5】:

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

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

          考虑在没有 else (或类似地,无括号 else)的情况下,加上一个语句会发生什么。控制流并不是缩进所暗示的。

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

          【讨论】:

            【解决方案6】:

            我强烈建议对每个 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(); // :-)
            }
            

            【讨论】:

              【解决方案7】:

              此代码的唯一问题是清晰度。假设您在每个 if 和 else 中没有大量语句,那么跟踪代码或空运行它对您来说会更难,因为您从开始 if 走得更远

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-08-16
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-01-08
                相关资源
                最近更新 更多