首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么rubocop或ruby样式指南不喜欢使用get_或set_?

为什么rubocop或ruby样式指南不喜欢使用get_或set_?
EN

Stack Overflow用户
提问于 2014-09-29 17:52:11
回答 2查看 10.3K关注 0票数 21

我在我的项目中运行rubocop,并解决了它引起的投诉。

有一个特别的抱怨困扰着我

代码语言:javascript
复制
Do not prefix reader method names with get_

我不能从这个抱怨中理解太多,所以我看了看source code in github

我发现了这个片段

代码语言:javascript
复制
    def bad_reader_name?(method_name, args)
      method_name.start_with?('get_') && args.to_a.empty?
    end

    def bad_writer_name?(method_name, args)
      method_name.start_with?('set_') && args.to_a.one?
    end

因此,建议或约定如下:

1)实际上,当方法没有参数时,他们建议我们不要使用get_。否则,它们将允许get_

2)并且当方法只有一个参数.otherwise时,他们建议我们不要使用set_。

这个约定、规则或建议背后的原因是什么?

EN

Stack Overflow用户

发布于 2016-01-15 04:36:47

另一种看法:据我所知,getter/setter范例在很大程度上是Java/C++等语言中的一种特定约定;至少我知道相当多的Java代码库,在过去,Beans中充斥着大量的get_getter和set_setter。在那时,私有属性很可能与"set_name()“和”get_name()“一起称为"name”;因为属性本身称为"name",所以getter不能也称为"name()“。

因此,"get_“和"set_”的存在是由于语言的一个(微不足道的)技术缺陷,这些语言不允许在方法名称中使用"=“。

在Ruby中,我们有很多不同的可能性:

  • 首先,我们有了name()name=(),它们立即消除了对get_set_语法的需要。因此,我们确实有getter和setter,我们只是调用它们与Java有所不同。
  • 还有,这个属性不是name,而是@name,因此解决这个冲突的方法就是你根本没有使用简单的"obj.name“语法的属性!当Rails/ActiveRecord假装"person.name“是一个”属性“时,它实际上只是一对自动生成的getter name()和setter name=()。从概念上讲,调用者不应该关心“名称”是什么(属性或方法),它是类的实现细节。
  • 它为每次调用节省了4到3次按键。这可能看起来像是一个笑话,但毕竟编写简洁而易于理解的代码是Ruby的标志。:-)
票数 7
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26097084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档