在工作中,我们将括号放在下一行,但在家里,我却反其道而行之。你更倾向哪个? (K& R vs OTBS)
function something() {
// ...
}
function something()
{
// ...
}
很多JavaScript库似乎都使用OTBS(一种真正的大括号样式)。我想跟随它们以便在其他JavaScript项目中保持一致,但K& R风格看起来不是更具可读性吗?
注意:我们知道JavaScript中返回和大括号的问题,这将始终是一个例外。但是,这只是一个案例。
答案 0 :(得分:145)
Douglas Crockford给出了选择K& R风格 1 的理由:
我总是使用K& R样式,将
{
放在行的末尾而不是前面,因为它避免了JavaScript的return
语句中可怕的设计错误。
他所指的错误是JavaScript如何在以下两种情况下以不同方式处理return
语句:
return {
'status': 'ok'
};
......和:
return
{
'status': 'ok'
};
第一个将返回一个具有status
属性的对象,而后一个将返回undefined
,因为semicolon insertion。
1 Douglas Crockford: JavaScript: The Good Parts: Style (page 96) - ISBN: 978-0596517748.
答案 1 :(得分:32)
这是一场你永远无法得到有用答案的圣战!只要坚持使用项目中的其他人,不要争论!
为了它的价值,我是一个K& Rite。我发现OTBS在开放结构和下面的语句之间放置了很多视觉空间,当这两行通常密切相关时,可以更好地一起呈现,而不会介入几乎空白的行。我希望保留空白行以分隔相关语句块。
无论如何,在很多空格的编码风格中,这可能相对不重要。但就个人而言,我非常重视简洁,所以我可以在屏幕上保留更多的节目。
我不认为在闭合支架的不同柱上使用开放式支架是一个问题。从凹痕中很容易看到块状。除非你使用悬挂缩进。不要那样做。但这完全是另一场圣战。
答案 2 :(得分:18)
我遵循Douglas Crockford的JavaScript编码约定,该约定受Sun的Java风格指南的启发。
答案 3 :(得分:12)
在我看来,这取决于还有谁将使用您的代码。如果你在一个C#团队工作并分担很多责任,那就把它放在一个新的界限上,避免不可避免的争吵。如果您使用大量PHP(或较旧的JS程序员),请将其放在第一行,原因完全相同。
但如果你正在寻找更具权威性的东西,道格拉斯·克罗克福德说开口支撑应该是always be on the top line。如果我没记错的话,他的推理是,它使它与其他语言保持一致。基本上,因为这是有效的,但(可能)代码不正确:
function myFunc()
{
return
{
ok: true
};
}
...你应该普遍避免在新线上打开括号。为什么?因为编程风格不会导致语法模糊。
上面的示例代码是有效的,因为它在语法上完全正确,如果您编写此代码,则不会引发异常。但是,它不会返回对象文字{ok:true}
,而是返回undefined
,并且无法访问其下方的代码。将开口括号放在一行,它将返回您可能期望的对象文字。
问题是,你觉得这个论点足够引人注目吗?
答案 4 :(得分:6)
两者都不比另一个好。只需选择一个并持续使用它。
答案 5 :(得分:5)
所有主观。有些稍好一些,但差别可以忽略不计。 最重要的事情是在所有代码中保持一致。
就个人而言,我更喜欢隐藏式,有4个空间'真实'标签。
function a() { if (b) { do; } else { do2; } }
答案 6 :(得分:3)
我更喜欢它们在同一行,但主要是因为我将匿名函数作为参数传递了很多...它节省了一些空间并使函数定义看起来不那么刺耳。当然,这只是一个观点,我同意Bytecode Ninja的观点,即一致性是最重要的。
答案 7 :(得分:0)
正如许多答案中所述,最重要的是你找到一种你(和/或你的队友,如果适用的话)坚持的风格。就个人而言,我更喜欢同一行,因为我发现如果你正在使用闭包和嵌套函数,那么在新行上放置大括号会导致许多近空行,这会使代码对我来说不那么可读(尽管可能不适用于大多数人......)
答案 8 :(得分:0)
由于上面列出的相同原因,我更喜欢K& R方法。它看起来更紧凑,两条相关的线组合在一起。