我曾经听说在单行语句中保留大括号在 JavaScript 中可能是有害的。我不记得推理了,谷歌搜索也没有多大帮助。
在 JavaScript 中,将所有语句括在花括号内是否是一个好主意?
我问,因为每个人似乎都这样做。
我曾经听说在单行语句中保留大括号在 JavaScript 中可能是有害的。我不记得推理了,谷歌搜索也没有多大帮助。
在 JavaScript 中,将所有语句括在花括号内是否是一个好主意?
我问,因为每个人似乎都这样做。
但他们被推荐。如果您扩展该语句,您将需要它们。
这是完全有效的
if (cond)
alert("Condition met!")
else
alert("Condition not met!")
但是,强烈建议您始终使用大括号,因为如果您(或其他人)曾经扩展该语句,则将需要它。
在所有带有支撑的 C 语法风格语言中都遵循同样的做法。C、C++、Java,甚至PHP都支持不带大括号的一行语句。您必须意识到您只保存了两个字符,而对于某些人的支撑样式,您甚至没有保存一行。我更喜欢完整的支撑样式(如下所示),因此它往往会更长一些。由于您具有非常清晰的代码可读性,因此可以很好地进行权衡。
if (cond)
{
alert("Condition met!")
}
else
{
alert("Condition not met!")
}
有一个可读性方面 - 当你有复合语句时,它会变得非常混乱。缩进有帮助,但对编译器/解释器没有任何意义。
var a;
var b;
var c;
//Indenting is clear
if (a===true)
alert(a); //Only on IF
alert(b); //Always
//Indenting is bad
if (a===true)
alert(a); //Only on IF
alert(b); //Always but expected?
//Nested indenting is clear
if (a===true)
if (b===true)
alert(a); //Only on if-if
alert (b); //Always
//Nested indenting is misleading
if (a===true)
if (b===true)
alert(a); //Only on if-if
alert (b); //Always but expected as part of first if?
//Compound line is misleading
//b will always alert, but suggests it's part of if
if (a===true) alert(a);alert(b);
else alert(c); //Error, else isn't attached
然后是可扩展性方面:
//Problematic
if (a===true)
alert(a);
alert(b); //We're assuming this will happen with the if but it'll happen always
else //This else is not connected to an if anymore - error
alert(c);
//Obvious
if (a===true) {
alert(a); //on if
alert(b); //on if
} else {
alert(c); //on !if
}
想法是,如果您总是有括号,那么您就知道在该块中插入其他语句。
该问题询问有关一行的陈述。然而,提供的许多示例显示了不基于多行语句省略大括号的原因。如果那是您喜欢的编码风格,那么在一行上不使用括号是完全安全的。
例如,问题询问这是否可以:
if (condition) statement;
它不会询问这是否可以:
if (condition)
statement;
我认为去掉括号更可取,因为它使代码更具可读性,而且多余的语法更少。
我的编码风格是永远不要使用括号,除非代码是一个块。并且永远不要在一行中使用多个语句(用分号分隔)。我发现这很容易阅读和清晰,而且从来没有关于“if”语句的范围问题。因此,在单个 if 条件语句上使用括号需要 3 行。像这样:
if (condition) {
statement;
}
最好使用一行 if 语句,因为它使用较少的垂直空间并且代码更紧凑。
我不会强迫其他人使用这种方法,但它对我有用,而且我非常不同意所提供的关于省略括号如何导致编码/范围界定错误的示例。
技术上没有,但非常推荐!!!
忘记“这是个人喜好”,“代码运行良好”,“它对我来说一直很好”,“它更具可读性” yada yada BS。如果您犯了错误并且相信我,这很容易导致非常严重的问题,并且在编码时很容易犯错误(不相信?,请查看著名的Apple go to fail 错误)。
论点:“这是个人喜好”
不它不是。除非你是一个离开火星的单人团队,否则不会。大多数时候会有其他人阅读/修改您的代码。在任何认真的编码团队中,这将是推荐的方式,因此它不是“个人偏好”。
参数:“代码会运行得很好”
意大利面代码也是如此!这是否意味着可以创建它?
论点:“它对我来说一直很好”
在我的职业生涯中,我见过很多因为这个问题而产生的错误。你可能不记得你有多少次注释掉'DoSomething()'
并为为什么'SomethingElse()'
被调用感到困惑:
if (condition)
DoSomething();
SomethingElse();
或者添加了 'SomethingMore' 并且没有注意到它不会被调用(即使缩进暗示了其他情况):
if (condition)
DoSomething();
SomethingMore();
这是我遇到的一个现实生活中的例子。有人想关闭所有日志记录,所以他们运行 find&replace "console.log"
=> //"console.log"
:
if (condition)
console.log("something");
SomethingElse();
看到问题了吗?
即使你认为,“这些都是微不足道的,我永远不会那样做”;记住,总会有一个团队成员的编程能力比你差(希望你不是团队中最差的!)
论点:“它更具可读性”
如果我学到了任何关于编程的知识,那就是简单的事情很快就会变得非常复杂。这是很常见的:
if (condition)
DoSomething();
在使用不同的浏览器/环境/用例进行测试或添加新功能后,变为以下内容:
if (a != null)
if (condition)
DoSomething();
else
DoSomethingElse();
DoSomethingMore();
else
if (b == null)
alert("error b");
else
alert("error a");
并将其与此进行比较:
if (a != null) {
if (condition) {
DoSomething();
}
else {
DoSomethingElse();
DoSomethingMore();
}
} else if (b == null) {
alert("error b");
} else {
alert("error a");
}
PS:奖励积分归于注意到上述示例中的错误的人。
不存在可维护性问题!
你们所有人的问题是到处都放了分号。多个语句不需要花括号。如果要添加语句,只需使用逗号。
if (a > 1)
alert("foo"),
alert("bar"),
alert("lorem"),
alert("ipsum");
else
alert("blah");
这是将像您期望的那样运行的有效代码!