JavaScript 大括号是否在新行上?

IT技术 javascript coding-style conventions
2021-02-24 06:44:11

在工作中,我们将大括号放在下一行,但在家里,我做相反的事情。你更倾向哪个?(K&R 与 OTBS)

function something() {
    // ...
}

function something()
{
    // ...
}

许多 JavaScript 库似乎都使用 OTBS(一种真正的大括号样式)。为了与其他 JavaScript 项目保持一致,我想遵循它们,但是 K&R 样式看起来是否更具可读性?

注意:我们知道 JavaScript 中返回和大括号的问题,这将始终是一个例外。然而,这只是一个案例。

6个回答

Douglas Crockford给出了选择 K&R 款式1的理由

我总是使用 K&R 样式,将 放在{行尾而不是行首,因为它避免了 JavaScriptreturn语句中可怕的设计错误

他所指的错误是 JavaScriptreturn在以下两种情况下如何以不同的方式处理语句:

return {
   'status': 'ok'
};

... 和:

return 
{
   'status': 'ok'
};

第一个将返回一个具有status属性的对象,而后者将undefined由于分号插入而返回


1 Douglas Crockford:JavaScript:好的部分:样式(第 96 页)- ISBN:978-0596517748。

这只是一个例子,如果您在新行上使用大括号,您可以例外。
2021-04-20 06:44:11
您不需要对编码约定进行例外处理。只需将对象设置为临时变量并让它返回临时变量即可。
2021-04-25 06:44:11
@rFactor:是的,这只是一个案例,你可以为这个案例做一个例外......但我认为保持一致的重要性,而不是为 return 语句设置例外。另一方面,我喜欢 K&R 风格,所以对我来说都很好:)
2021-04-26 06:44:11
哇 - 我不同意 Crockford 和其他任何人的意见,即根据单一的、很少见的、kludge-driven 行为选择编码约定。因为这个,我对这个人失去了一点尊重。
2021-05-03 06:44:11
@Jeff,为什么从函数返回一个动态创建的对象是“kludge 驱动行为”的例子?拥有不需要例外的风格当然是一个完全合理的观点。
2021-05-06 06:44:11

这是一场圣战,你永远得不到可用的答案!只要坚持项目中其他人正在使用的任何东西,不要争论!

就其value而言,我是 K&Rite。我发现 OTBS 在开头结构和以下语句之间放置了很多视觉空间,当这两条线通常密切相关时,因此最好一起呈现,而没有中间几乎空白的线。我喜欢保留我的空行来分隔相关语句块。

在无论如何都有很多空白的编码风格中,这可能相对不重要。但我个人更看重简洁,所以我可以在屏幕上保留更多的节目。

我不认为在不同的列上放置开放式支撑与封闭式支撑是一个问题。仅从缩进处看块形状仍然很容易。除非您使用悬挂缩进。不要那样做。但这完全是另一场圣战。

我完全同意这里的@Keith。
2021-04-16 06:44:11
对于大多数语言,我同意这是一场毫无意义的圣战,一致性应该是决定性因素,但我认为对于 Javascript,分号的自动插入为内联左大括号提供了真正的技术论据。我不确定我是否完全同意,但这一个技术性的而非宗教性的论点。
2021-05-05 06:44:11
就我个人而言,当我是决定的人时,是的。如果我不是,因为我是一个更广泛项目的一部分,我不会将一个在很大程度上不重要的偏好强加给其他人。
2021-05-09 06:44:11
您是否也将此约定用于其他语言?喜欢PHP?
2021-05-14 06:44:11

我遵循 Douglas Crockford 的 JavaScript 编码约定,其灵感来自 Sun 的 Java 风格指南。

这是它的链接:http : //javascript.crockford.com/code.html

我想添加相同的链接。所以+1给你:你更快!此外,我建议始终使用 JSLint 验证您的 javascript 代码(请参阅jslint.com)。顺便说一句,可以验证两种放置大括号的方式都是正确的。
2021-04-26 06:44:11
很好的一点,因为支架放置真的很重要
2021-05-02 06:44:11

在我看来,这取决于还有谁将使用您的代码。如果你在一个 C# 团队工作并分担很多责任,把它放在一个新的线上,避免不可避免的争吵。如果您与很多 PHP(或较老的 JS 程序员)一起工作,出于完全相同的原因,将其放在第一行。

但如果你正在寻找更权威的东西,道格拉斯·克罗克福德说,开场大括号应该总是在最上面如果我没记错的话,他的推理是它使它与语言的其余部分保持一致。基本上,因为这是有效但(可能)不正确的代码:

function myFunc() 
{
    return 
    {
      ok: true
    };
} 

...您应该普遍避免将大括号放在新行上。为什么?由于编程风格应该不会引起歧义。

上面的示例代码是有效的,因为它在语法上是完全正确的,如果您编写此代码,将不会引发任何异常。但是,{ok:true}它不会返回对象字面量,而是会返回undefined并且无法访问它下面的代码。将左大括号放在一行上,它将返回您可能期望的对象字面量。

问题是,你觉得这个论点足够令人信服吗?

完全没有说服力。我的编码约定: A. 使用您想要的任何大括号样式。B. 任何依赖于 BRACE STYLE 的构造都是 FUBAR,按照惯例应该避免。
2021-05-02 06:44:11
我对 JS 一无所知,但在我看来,当你想象你正在做以下事情时,这种行为变得不那么不合逻辑:1)你没有返回值 2)你创建了一个匿名字典,内容为“ok =真的”。所以这不是反对 OTBS 的论点,因为试图将 return 语句与其参数分开只是糟糕的编码风格——不管你使用什么大括号风格。
2021-05-15 06:44:11

没有一个比另一个更好。只需选择一个并始终如一地使用它。

我同意一致性是最重要的因素,但第一个因素节省了一些水平空间,这就是我现在更喜欢它的原因。
2021-04-22 06:44:11
@grm:我也更喜欢第一种风格,因为它更像是我习惯的 Java 命名约定。但有人可能会争辩说,第二种风格会导致代码更具可读性。然而,最终,恕我直言,与编写正确和可维护的 JavaScript 代码相关的更重要的因素相比,并且考虑到大多数 IDE 可以通过单击以任何一种方式格式化代码(IntelliJ IDEA 和 WebStorm 可以做到这一点),这个问题失去了重要性。
2021-04-28 06:44:11