布尔属性的命名规范

18

我希望编写的代码能被其他人轻松理解。

hide_emailemail_hidden这样的布尔属性有惯用的样式吗?


2
问号是布尔方法的一个好系统,但它不能用于变量名。 - max pleaner
变量名称像那些被定义为attr_accessor的,只需省略? - Andre Figueiredo
4个回答

34

我这样理解:

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

因此,在您的特定情况下,请将属性命名如下:

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

1
我喜欢这里放弃使用属性名称中的"is"的建议。多年来,由于最佳实践中存在各种建议,我对此犹豫不决。但是,我认为去掉它会使它更加简洁,即使听起来不像句子。例如:user.email_hidden? vs user.email_is_hidden?。公平地说,只要您在代码库中保持一致,任何一个都应该可以正常工作。 - Joshua Pinter

3

以下是您提供的两个名称示例:

  • hide_email 可以作为执行所有隐藏电子邮件系统范围内程序的方法的好名称。但它绝不适用于返回电子邮件状态的布尔方法。
  • email_hidden? 带有问号(?)结尾,是表示电子邮件是否已隐藏的布尔方法的正确名称。

如果您真正想编写优秀的代码,请始终考虑 Ruby 约定。即使在思考系统中的流程时,也会对您有所帮助。


4
变量名中不能包含问号,只能用于方法名。 - max pleaner
@maxpleaner说得好。我编辑了一下,在boolean后面插入了“方法”这个词。 - Ed de Almeida
很好的一点是hide_email更像是一个动词而不是形容词。也就是说,它听起来像是一个动作,而不是一个属性。 - Joshua Pinter

2
那会是email_hidden?。这是 Ruby 社区习惯使用的方式。请注意末尾的?

我猜你的意思不是要用问号保存属性吧?我知道在Rails中,你可以用问号调用所有属性。 - Fellow Stranger
我明白你的意思。我以为你有一个布尔属性,其他人想要查询它。不,你不想使用email_hiddenemail_hidden?作为设置器方法。你会想要使用一个动词,比如hide_email来隐藏它,而email_hidden=则允许其他人为你设置它。 - Uzbekjon
1
从你提出问题的方式来看,似乎你在谈论一个用于检查电子邮件状态的布尔方法,而不是一个执行隐藏程序并在成功时返回true、失败时返回false的方法。 - Ed de Almeida

2

在 Ruby 中,您还可以看到 obj.is_a?(Something)hash.has_key?(:foo)。也就是说,当您引用 self 时使用 is_XXX?has_XXX? 是可以接受的。 - Andrea Pavoni

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