【问题标题】:Is the "curly braces always should be on the statement line" rule so important? [closed]“花括号总是应该在语句行”规则如此重要吗? [关闭]
【发布时间】:2012-08-13 20:44:01
【问题描述】:

我理解“分号隐式插入”,但我不确定它是否发生在函数表达式的情况下。

例如,这两个表达式总是会同等解释:

Matrix.scale = function (mat, scaleX, scaleY, dest) {
// useful code
};

Matrix.scale = function (mat, scaleX, scaleY, dest)
{
// useful code
};

我喜欢第一个,我注意到 Google 也喜欢它:http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Code_formatting#Code_formatting。但我的同事不喜欢这种风格。问题是是否严格遵守这条规则,即使有函数声明,或者它是对统一性的致敬,并且这段代码在经过巧妙的缩小后不会中断?

【问题讨论】:

标签: javascript google-style-guide


【解决方案1】:

在其他语言中,这可能是个人喜好问题,但在 JS 中,很难找到错误的来源。考虑以下snippet,乍一看它可能不会像预期的那样:

function foo()
{
  return
  {
    bar: 1
  };    
};

console.log(foo()); // => undefined

延伸阅读:http://en.wikipedia.org/wiki/JavaScript_syntax(搜索“分号插入”)

【讨论】:

  • 我不明白你要表达的意思。这与拥抱格式有什么关系?
  • 我的观点是,在 JS 中将大括号放在新行上可能(在某些情况下)有问题。所以最好(在我看来,同样,in JS)总是把它放在右边
  • 由应该知道的人解释:youtube.com/watch?v=hQVTIJBZook&t=30m38s
  • 做到了! JS 欺骗了我——老实说,我从来没有遇到过这种情况(至少在我编写的代码中),因为我使用了被拥抱的语法。谢谢!! +1
【解决方案2】:

代码风格只是关于如何格式化代码和命名变量的协议:

  • (子)社区中使用这种语言进行编码、开发特定库等的人。
  • 您的公司。

很难说这两个因素中哪一个更具有决定性,但是说好的公司代码风格与“野外”的代码风格密切相关并不是一个大胆的说法。部分原因是在优秀的公司中,代码通常是为开源贡献的,因此最好不要重新发明它。

有些语言非常坚定、彻底,并且被绝大多数风格指南所认可。例如,this_is_very_uncommon_to_java

至于 javascript,情况并非如此。没有像抽象的、通用的“javascript 代码风格”这样的东西。大括号的问题仍然是 javascript 社区中大量讨论的话题,分号也是如此。我想,这只是因为 js 开发的任何其他问题都已经解决了 ;)

如果您需要建议(看起来您确实需要),请与您的同事和平相处。达成任何协议并遵守。这是最重要的——良好的团队关系比任何代码样式协议都重要。

【讨论】:

    【解决方案3】:

    根据Code Complete这本书,括号应该放在第一行(称为控制语句),因为放在第二行会误导,因为它没有显示逻辑结构编码。如果从图形的角度来看,第二种方法是这样的:

    其中 A-E 行代表以下内容,类似于本题中声明的第二种方法。

    A function foo ()
    B {
    C     print "Hello";
    D     print "World";
    E }
    

    您所看到的内容具有误导性,因为您无法判断 B 行是否从属于 A 行,或者 B 行是否是其自己的单独语句

    编辑:如果图像过于抽象,这里快速解释一下为什么大括号通常与控制语句一起包含在第一行

    函数有两个主要元素:

    1. 控制结构
    2. 函数语句

    通过将大括号放在第二行(图像中的 B 行)上,它既不在控制语句中,也不是函数语句的一部分。

    编辑 2

    IMO,每一行代码都应该有一个目的,即节省垂直空间以便在我的屏幕上一次查看更多行并保留代码的逻辑含义。因此,当大括号与函数声明在同一行时,它就与它打开的语句相关联。但是,当它单独位于一行时(在我的示例中为 B 行)并且它没有缩进以显示从属于函数声明,那么它会破坏代码的逻辑含义,因为它既不与控制结构相关联也不是函数语句。因此,通过将大括号与函数声明放在同一行,那么每一行代码都有一个用途,它包含代码的逻辑含义,并且它节省了我的屏幕空间。

    function foo() { // brace is on the same line and it's associated with the statement that it opens
        print "Hello"; // this line does something
        print "World"; // this line does something
    } // this last brace terminates the function which is part of the control construct
    

    【讨论】:

    • @Chiyou,你说的数数和数数是什么意思?
    • 我需要更新图片,B行是第二种方法中的括号。我认为这将澄清一些事情,表明在第二行放置一个括号会使事情产生误导,因为它没有证明它从属于控制语句
    • 我觉得不对,因为B行只能是大括号。
    • 这里是完整的解释:http://flylib.com/books/en/2.823.1.264/1/
    • 大括号与函数对齐。在您的链接中,我没有看到列表的示例。第二行总是有大括号。
    【解决方案4】:

    这是 100% 的口味问题。无论您喜欢什么,我都同意最好保持一致。因此,如果您是一个项目的新手,您真的应该遵循既定的风格指南。

    【讨论】:

      【解决方案5】:

      如果您不为 Google 工作,则无需遵守该规则。它不会破坏任何东西。我个人喜欢后一个版本,因为它多了一行。

      【讨论】:

      • 你为什么更喜欢它,因为它有额外的线条?
      • 因为和语句一致。
      猜你喜欢
      • 1970-01-01
      • 2021-04-16
      • 2012-11-22
      • 1970-01-01
      • 2012-01-18
      • 2011-01-08
      • 2019-07-11
      • 1970-01-01
      相关资源
      最近更新 更多