积木 - 花括号/没有花括号?

时间:2011-12-12 04:45:57

标签: php block

当我开始开发时,我遵循了总是使用{}(花括号)来封闭块的教程。但是,当我开始查看其他人的代码(例如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)在不使用{}时,是否有最佳做法?

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

5 个答案:

答案 0 :(得分:8)

最佳做法是始终使用它们。对于其他开发人员来说,添加一行代码或删除一行代码并且无意中完全破坏条件,这太容易了。

答案 1 :(得分:4)

您可以省略{}一行:

if(something)
  do something else

然而你不能忽略它并让它继续这样:

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

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

是的,我之前看过没有{}的草率方法,我自己更喜欢使用{}分隔逻辑,而且更容易阅读。

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

答案 2 :(得分:1)

这主要取决于您习惯的风格。 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调用。

答案 3 :(得分:0)

如果大括号后面有多行代码,则只需使用它们。

if($var) return true;

相同
if($var) {
  return true; 
}

但是,如果您有多行,则必须将它们用大括号括起来。

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

我个人在停止使用它们时,因为你说的是​​一行代码,它看起来更干净,特别是如果它在一行上就像top语句一样。同样,如果您减少else if语句,只需使用returnif失败时停止该函数并继续前进到if,您的代码将更易于管理1}}关于true。使用大量else if语句并且不使用开关时,它可能会非常混乱。除了个人喜好之外,如果它只是一行代码,则会失去支撑。

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

答案 4 :(得分:0)

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

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

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

您是否使用大括号包围单行语句是个人偏好的问题,如果您正在开展协作项目,也可能由编码风格文档决定。我个人从来没有将它们用于单个语句,并允许缩进我的代码以显示代码是如何组织的,但是如果你看到我上面的第二个例子,这是我之前看到的bug出现的情况。编码器创建了一个带有条件的条件。基于该条件执行的单行。然后另一个编码器进入并添加第二行但忘记添加大括号。所以从这个角度来看,你可以说总是使用它们。这在很大程度上取决于你的个人情况。