当我开始开发时,我遵循了总是使用{}
(花括号)来封闭块的教程。但是,当我开始查看其他人的代码(例如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)在不使用{}
时,是否有最佳做法?
任何答案,特别是那些公司。关于块大括号使用惯例的背景/文档与不使用它们将非常感激,因为我真的想了解花括号的用法:)!
答案 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
语句,只需使用return
在if
失败时停止该函数并继续前进到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出现的情况。编码器创建了一个带有条件的条件。基于该条件执行的单行。然后另一个编码器进入并添加第二行但忘记添加大括号。所以从这个角度来看,你可以说总是使用它们。这在很大程度上取决于你的个人情况。