【问题标题】:Naming conventions for boolean attributes布尔属性的命名约定
【发布时间】:2016-08-31 18:28:18
【问题描述】:

我想编写其他人也容易理解的代码。

hide_emailemail_hidden 这样的布尔属性是否具有约定样式?

【问题讨论】:

  • 问号是布尔方法的好系统,但不能用在变量名中。
  • 变量名称,如定义为attr_accessor 的变量,省略?

标签: ruby-on-rails ruby attributes naming-conventions


【解决方案1】:

那就是email_hidden?。这是 Ruby 社区所习惯的。

请注意末尾的?

【讨论】:

  • 我假设您不是要保存带有问号的属性?我知道在 Rails 中,您可以使用问号调用所有属性。
  • 我明白你的意思。我以为你有一个其他人想要查询的布尔属性。不,您不想使用email_hiddenemail_hidden? 作为setter 方法。您可能希望使用像 hide_email 这样的动词来隐藏它,并使用 email_hidden= 来允许其他人为您设置它。
  • 他们问这个问题的方式......似乎你在谈论一个检查电子邮件状态的布尔方法,而不是一个执行隐藏它的过程并返回 true 以防万一成功时为假,失败时为假。
【解决方案2】:

以你给出的这两个名字为例:

  • hide_email 将是执行此类任务的方法的好名称,该方法执行所有过程以在系统范围内隐藏电子邮件。但对于返回电子邮件状态的布尔方法来说,这绝不是一个好名字。
  • email_hidden?,末尾带有问号 (?),将是指示电子邮件是否隐藏的布尔方法的正确名称。

如果您真的想编写好的代码,请务必考虑 Ruby 约定。即使考虑系统中的流程,它们也会为您提供帮助。

【讨论】:

  • 问号不能在变量中,只能在方法名中
  • @maxpleaner 说得好。我对其进行了编辑以在布尔值之后插入“方法”一词。
  • hide_email 更像是一个动词而不是一个形容词。也就是说,它听起来像一个 action,而不是 property
【解决方案3】:

ruby 代码闻起来说所有布尔方法都应该以 ? 结尾。

在活动记录中你可以看到

User.valid?

或者在 ruby​​ 中你可以找到

[].nil?
[].empty?

如果您想了解 Ruby 的约定,请阅读本文

http://blogs.visoftinc.com/2010/04/12/ruby-beauty-method-naming-conventions/

【讨论】:

  • 在 ruby​​ 中,您还可以看到 obj.is_a?(Something)hash.has_key?(:foo)。也就是说self时使用is_XXX?has_XXX?是可以接受的
【解决方案4】:

我是这样想的:

  • 布尔属性应该回答简单的是/否问题。
  • 问“是吗?”是问是/否问题的简单方法。
  • 所以布尔属性名称应该完成句子is <attribute_name>
  • 然后只需删除is,因为Ruby 更喜欢? 后缀作为“is”风格的方法名称(更多信息请参见下文),只剩下email_hidden

因此,对于您的具体情况,请像这样命名您的属性:

  • 从“电子邮件被隐藏”这个问题开始?在代码中可以表示为:email_is_hidden
  • 删除is,剩下的是email_hidden
  • Ruby on Rails 定义了布尔属性的“谓词”版本(以? 结尾)并按预期返回true/false。因此,虽然您的属性在数据库中被命名为 email_hidden,但为了清晰起见,您应该在代码中将其引用为 email_hidden?,这也是 Ruby on Rails 约定。

【讨论】:

  • 我喜欢这里的建议,即从属性名称中删除“is”。多年来,当您听到有关最佳实践的各种建议时,我一直对此持观望态度。但我认为放下它会使它更干净一些,即使它听起来不像是一个句子。例如user.email_hidden?user.email_is_hidden?。公平地说,只要您的代码库保持一致,任何一个都应该可以正常工作。
猜你喜欢
  • 2010-11-18
  • 2018-08-31
  • 2012-12-03
  • 2011-06-24
  • 1970-01-01
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多