Rails 中没有括号 - 风格好吗?

No Parenthesis in Rails - Good Style?

当我第一次开始使用 ruby/rails 并注意到您不需要加括号时,我记得当时在想 "no way I'll do that!"。

不过现在有点喜欢了

那么问题来了,这样的风格好吗?还是我应该坚持使用括号?

谢谢。

否决票可能是因为 SO 在技术上不是解决此类问题的好论坛 - 显然 SO 社区喜欢清晰、可回答、离散、objective 的问题,而不是像这样的更笼统的风格或技术问题。但我喜欢这样的问题,所以就开始吧。

自从处理 Ruby 各种像这样的小风格问题后,我就快要疯了,这很愚蠢,因为它们没什么大不了的。但是 Ruby 社区似乎对风格问题很着迷,也许它只是伴随着拥有极富表现力的语言的领域。

我的回答:

我尽量围绕使我的代码尽可能易于理解,而不是让它过长。如果我在两种风格之间挣扎,我几乎总是会选择我认为将来对更多新手开发人员来说更容易理解的风格。

当没有参数时,或者当参数 "flows naturally" 位于方法名称之后时,我会省略括号。因此,如果该方法正在描述一个动作并且第一个参数是该方法的对象,那么省略括号会很漂亮。像这样:

create :user, name: "Topher"
raise "Problem!" unless @thingy.is_a? String
render partial: "filters"

但通常该方法的第一个参数是选项的哈希值或者是一个附带值或 "the object of the action being taken" 以外的其他值。在这些情况下,我通常会发现省略括号看起来不对/不和谐。像在这些情况下:

@user.disable!(force: true)
@entries.paginate(page: params[:page])

当然,如果您将方法链接在一起(例如构建 ActiveRecord 调用),如果存在任何参数,则需要包含括号,因此问题变得没有实际意义。

更笼统的回答:

如果您还没有,请从头到尾阅读 the Ruby style guide 几遍。有些规则会吸引你,有些会排斥你,但让自己接触它会让你熟悉许多其他 Rubyists(他们争论这些风格令人作呕)所使用的风格和模式,以及当你当您遇到类似的情况时,您会更加意识到处理它的不同方法以及这些不同风格的权衡可能是什么。