【问题标题】:Blocks - curly braces/no curly braces? [closed]块 - 花括号/没有花括号? [关闭]
【发布时间】:2012-01-18 04:40:48
【问题描述】:

当我开始开发时,我遵循的教程总是使用{}(大括号)来包围块。然而,当我开始查看其他人的代码(例如 GitHub 上的类,或者只是比基本教程显示的更多代码)时,我也看到了没有包含在 {} 中的块语句,例如;

if($var < 15)
     $string = 'Hello, Jimmy!';
elseif($var >= 15)
     $string = 'Hello, Anne!';

是一样的

if($var < 15) { 
    $string = 'Hello, Jimmy!';
} elseif($var >= 15) {
    $string = 'Hello, Anne!';
}

我从未使用过未包含在 {} 中的块,但是我今天使用了它们并且我开始看到这样做的效率(它看起来也更干净,因为我经常会发现我的函数千疮百孔来自循环、条件等的{}

我要问的是;

a) 没有花括号 (; 我注意到我的 IDE 在输入一行后从缩进中退回并在if() 条件后返回?

b) 在不使用{} 时,是否有任何最佳实践?

任何答案,特别是那些公司。关于块的大括号使用约定与不使用它们的背景/文档将不胜感激,因为我真的很想了解大括号的用法:)!

【问题讨论】:

  • 这是一个偏好问题。我真的不喜欢省略它们,其他人喜欢。如果你保持一致,你可能没问题。
  • 有了 SSL 中的这个相当大的错误,我想说这个问题非常相关。请注意,ALWAYS 使用花括号可以确保不会发生此问题。 imperialviolet.org/2014/02/22/applebug.html

标签: php block


【解决方案1】:

最佳做法是始终使用它们。其他开发人员很容易出现添加一行代码或删除一行代码并在无意中完全破坏条件。

【讨论】:

    【解决方案2】:

    您可以在一行中省略{}

    if(something)
      do something else
    

    但是你不能省略它并让它继续这样:

    if(something)
       do one thing
       do another
       do some more
    

    上面的例子只有 1 个条件元素(“做一件事”)。其余的将无条件运行。

    是的,我以前见过没有{} 的草率方法,我自己更喜欢使用{} 来分隔逻辑,并且更易于阅读。

    所以坚持在你的代码中使用{}

    【讨论】:

    • 非常彻底的答案!我会坚持使用它们:)。当计时器下降时,我会接受。
    • 您还可以在缩进下一行时经常跳过大括号。
    【解决方案3】:

    这主要取决于您习惯的风格。 http://en.wikipedia.org/wiki/Indent_style

    if (some_error)
        something(); //Will be executed only when some_error==true
    somethingelse(); //Will always be executed.
    

    如果不使用大括号,则只有下一行是 if 语句的一部分。

    if (some_error)  err1 = "bad1"; errorno=3;
    

    当然,在上面的例子中,无论 some_error 是否为真,errno 总是为 3。

    for循环也一样

    for (i = 0; i < 10; i++)
        doSomething (i);
    

    所以大括号标记了它的开始和结束位置。不使用它们意味着只有下一行会受到 if, for, while, ... 语句的影响。

    此外,大括号可用于标记代码块。当我用 C++ 编写代码时,我总是用大括号标记 GL 调用的开始和结束。

    glBegin(GL_TRIANGLES); // Drawing Using Triangles
    {
        glVertex3f( 0.0f, 1.0f, 0.0f); // Top
        glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
        glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
    }
    glEnd();
    

    这样更容易阅读和发现丢失的 glEnd 调用。

    【讨论】:

      【解决方案4】:

      如果要在条件或循环之后执行的语句只有一行,则花括号是可选的:

      //This outputs "hello"
      $test = 1;
      if($test == 1)
          echo "hello";
      
      //This outputs "howdy"
      $test = 1;
      if($test == 2)
          echo "hello";
          echo "howdy";
      

      是否用大括号括起单行语句是个人喜好问题,如果您正在开展协作项目,也可能由编码样式文档决定。就我个人而言,我从不将它们用于单个语句,并允许我的代码缩进以显示代码的组织方式,但是如果您看到我上面的第二个示例,这是我之前看到的错误蔓延的情况。编码器创建一个带有 a 的条件根据该条件执行的单行。然后另一个编码器进入并添加了第二行,但忘记添加大括号。所以从这个角度来看,你可以说总是使用它们。这在很大程度上取决于您的个人情况。

      【讨论】:

        【解决方案5】:

        只有在大括号后面有多行代码时才需要使用它们。

        if($var) return true;
        

        if($var) {
          return true; 
        }
        

        但是,如果您有不止一行,则必须将它们括在花括号中。

        if($var) {
         $var += 1;
         $var2 = $var;
         return $var2
        }
        

        我个人在一行代码后停止使用它们,因为你是对的,它看起来更干净,特别是如果它像 top 语句一样都在一行上。同样,如果您减少 else if 语句并在 if 失败时仅使用 return 停止该函数并继续转到下一个 if 时,您的代码将更易于管理。使用大量else if 语句,并且您不使用开关,它会很快变得非常混乱。除了个人喜好,如果只是后面一行代码,就不要大括号了。

        AlienWebguy 在专业发展方面是正确的,在这种情况下使用它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-02
          • 1970-01-01
          相关资源
          最近更新 更多