2011-12-12 155 views
5

当我开始开发时,我遵循总是使用{}(花括号)来封装块的教程。然而,当我开始查看其他人的代码时(例如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从缩进中退出,并在条件有效后返回。

b)当没有使用{}时,是否有最佳做法?

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

+1

这是一个偏好问题。我真的不喜欢忽略它们,其他人也这么做。如果你是一致的,你可能没问题。 –

+0

有了这个在SSL中的主要错误,我会说这个问题是非常有针对性的。请注意,*总是*使用大括号可以确保这个问题没有发生。 https://www.imperialviolet.org/2014/02/22/applebug.html – Alan

回答

4

可以省略{}为一个单行:

if(something) 
    do something else 

但是你不能忽略它,并把它坚持下去,像这样:

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

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

是的,我以前看过没有{}之前的sl method方法,我自己更喜欢用{}来分开逻辑,并且更容易阅读。

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

+1

伟大的彻底的答案!我会坚持使用它们:)。我会接受定时器何时下降。 – Avicinnian

8

最佳做法是始终使用它们。对于其他开发人员来说,添加一行代码或删除一行代码并完全打破条件非常容易。

0

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

if($var) return true; 

一样

if($var) { 
    return true; 
} 

不过,如果你有一个以上的线越多,你必须附上他们在大括号。

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

我个人当一行代码其次,因为你是对的,它看起来更清洁停止使用它们,特别是如果它全部在一行像上面的语句。同样,如果您减少了else if语句,并且只使用returnif失败时停止该函数,并且继续保持真实的下一个if,那么您的代码将更易于管理。它可以真正快速地使用很多else if语句,并且不使用开关。除了个人偏好之外,如果它只是一行代码,则会丢失大括号。

AlienWebguy是正确的,当涉及到专业发展,在这种情况下使用它们。

0

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

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

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

无论您围绕单行语句用大括号是个人喜好的问题和如果您正在开展一项合作项目,也可能会受到编码风格文档的支配。就我个人而言,我从不使用它们作为单个语句,并允许缩进我的代码以显示代码是如何组织的,但是如果您看到上面的第二个示例,这是我之前见过的错误在哪里蠕变的情况。编码器创建一个条件根据该条件执行单行。然后另一个编码器进入并添加第二行,但忘记添加大括号。所以从这个角度来看,你可以说总是使用它们。这很大程度上取决于您的个人情况。

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 (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调用。