Ruby空格:{:a => 1}比{:a => 1}好吗?

10

看了其他人的代码,我发现在花括号块内部包含额外的空格似乎非常普遍。这样做有什么原因吗?对我来说,这似乎增加了额外的按键操作,使代码看起来更丑陋。特别是当嵌套层数增加时:

lambda { (1..5).map { |i| { :a => { :b => i } } } }

因为某些原因,这样做看起来更加简洁和连贯:

lambda {(1..5).map {|i| {:a => {:b => i}}}}

额外的空格可能是一些文本编辑器的副作用,或者有一个历史原因之类的东西吗?我没有在样式指南中看到这个问题得到解决,如果像缩进2个空格一样,我想遵循约定,但如果没有好的理由,我猜我会继续按自己的方式做事。你更喜欢哪个,并为什么?


3
由于这个主题很主观,你可能希望将其设为社区 Wiki。 - Sarah Vessels
花括号可以表示块和哈希。 - David J.
我想我原本希望这不会那么主观,希望有一个明确的正确答案,并且有有效的理由支持。 - eremite
如果你问“大多数有经验的Ruby程序员做什么?”,那么答案就不会很主观。它可以通过经验法则来确定(如果有人想要的话,可以在GitHub存储库上运行代码分析器!)。 - David J.
9个回答

8

我看到的Ruby代码中大多数使用这种风格(希望我写的所有代码都是这种风格):

{ :key => 'value' }

这是我已经习惯并内化的。

总的来说,这个特定的风格问题并不是至关重要的。尽管如此,Ruby社区(以及其他社区)认为将你的风格(a)与你正在使用的项目相匹配,以及(b)与整个代码社区相匹配非常重要。这就是为什么我建议使用额外的空格。

顺便说一下,这是一个很好的Ruby风格指南:http://www.caliban.org/ruby/rubyguide.shtml#style


所以我采纳了你的建议,在Github上对最受关注的ruby项目运行了几个简单的正则表达式。结果发现块几乎总是包含额外的空格,而哈希通常也有,但不总是。以下一些组合方法很有趣,但似乎并不被广泛喜爱或立即显而易见,因此我已决定顺应大多数人的意愿并改变我的编码风格,使用额外的空格(并预期ruby 1.9中不需要它们的哈希,正如Mereghost指出的那样)。 - eremite

3

您可以使用组合。在我曾经工作的地方,我们有一个有点模糊的样式规则,即“在括号内使用空格,除非它们是结构的外部括号。”这听起来很困惑,但它经常帮助您得出一些直观美观的结果。

lambda {(1..5).map {|i| {:a => { :b => i }} }}

我喜欢这种间距的设置,使内部哈希(返回值)不会感觉太过拥挤,末尾的}}也有助于你看到它被两层嵌套包裹。


3

看起来只是一个样式问题。我认为它们很丑,可以省略额外的空格。

编辑: 我同意下面评论中的观点,仅仅说这是一个样式问题并不意味着可以随意做任何事情。如果其他人需要阅读或维护代码,遵循通用的样式就是良好的编码实践。所以如果有人说服我大多数Ruby代码都使用这种方式的话,我会第一个加入空格。个人而言,我仍然认为它很丑,但这比让别人能够阅读我的代码重要得多。


3
许多事情都涉及风格——但是一个人对风格的偏好并不是唯一(甚至是主要)的因素。关键问题是如何使用与 Ruby 社区相适应的风格。这样做会使你的代码更易于阅读,并在社区中获得更多的尊重。 - David J.
1
这里要反其道而行之:更容易读懂的是为了谁?当然,如果代码设计是为 Ruby 社区阅读而设计的话,那没错 —— 但是如果最需要理解它的人是你自己,你应该以最容易让自己阅读的方式来组织代码。(话虽如此,我并不提倡过于偏离常规编码风格 —— 最好还是尽力去遵循规范,因为在需要阅读他人代码时会有回报……) - Shadowfirebird

1

你所展示的例子是一种风格问题。如果你要把它放在同一行上,我认为你应该去掉空格。然而,如果你采用

[1,2,3].slice (2)

在你的代码中,Ruby会给出一个警告:

警告:不要在参数括号前放空格。

所以,我猜Ruby对于括号比花括号更为热爱。


2
你正在比较不相干的事物。@eremite所提到的空格是指花括号内部的空格,而不是外部的空格。你在谈论前导(以及可能的尾随)空格。你的类比例子可以是[1,2,3].slice( 2 ) - Zano
因此,“however”这个词。 - dbrown0708

1
在大多数情况下,空格都被视为语法噪音,让人感到烦恼...我觉得Ruby社区最近对它们的痴迷令人惊讶,在十年没有这样的规范之后,那些关心它们的少数人试图将它们强制作为规范。

0

哈希表开头/结尾的额外空格可能是为了改善键/值对的可读性而采用的良好风格,特别是当它们不以字母开头/结尾时。

{:a => "b"} #is less readable than
{ :a => "b" } #more readable.

这在一定程度上归因于花括号,我很少看到 Ruby([])中哈希值开头有空格。
Ruby 1.9 中引入的新哈希语法可能会修改这个问题。

{a: "b"} #same as {:a => "b"}

0

我一直认为在花括号块内包含额外的空格是最易读的,但如果前面的字符是闭合括号,则省略最后一个空格。以你的例子为例:

lambda { (1..5).map { |i| { :a => { :b => i }}}}

1
完全主观的,但这种不对称让我感到困扰。 - Justin Force

0

我不是Ruby程序员,但我倾向于在括号/圆括号后面加上额外的空格,如果它们之间有更长的内容 - 即更长的if语句或作为函数参数的额外计算。

所以我会说 - 尽管我不是Ruby程序员 - 按照你自己的意愿/雇主的意愿(如果你不是自由职业者/爱好者)去做。


0

在某种程度上,我认为这是个人口味的问题。通常情况下,我发现添加空白可以提高可读性 - 但并非总是如此。在您的示例中,就我个人而言,我会:

lambda{ (1..5).map{ |i| {:a=>{:b=>i}} } }

当然,如果你发现阅读它有问题,几乎总是有不使用lambda的选择,如果你更喜欢的话。
如果你和一群其他人一起编写代码——或者为了向Ruby社区展示你的代码而编写——你还需要考虑他们会觉得阅读起来如何。
但我不确定我是否非常在意上面的例子是否符合“正常的Ruby空格规范”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接