2017-08-15 87 views
-1

我有一个模型,模型有几个属性。 我想要做的是根据其他属性将其中一个布尔属性设置为true。如何命名将其他布尔值变为true的函数?

比方说,我们有一个模型叫用户和用户具有类似属性..

  • ID(INT)
  • 名(文本)
  • 生日(日期)
  • legal_age(布尔)

我被要求更改法定年龄属性,根据生日。 (如果用户年满20岁,请将其变为true,否则请保持为false。)我将此函数命名为check_legal_age,因为它将法定年龄列设置为true。

但是,我的一位同事告诉我这个名字太含糊,很难弄清楚函数做了什么以及函数返回什么样的值。

经过一番交谈之后,我决定将该功能命名为make_legal_age_true,一个罗嗦但直截了当的名字。该同事还建议我给名字trufy_legal_age

有没有一种传统的方式来命名这样的方法,使其他人阅读代码的意图是清楚的?

+3

我会对你的问题进行一点说明,所以不太关注意见,否则它可能因为脱离主题而被关闭。更像“这种类型的方法的命名约定是什么”将是一种改进。也就是说,我会让它成为一个爆炸式的'!'方法,并称之为'legal_age!' –

+1

同意@ m.simonborg,你的方法正在修改自己(它自己的属性),所以一个简单的爆炸'legal_age!'做了很多并且通常会被ruby程序员轻松理解,请参阅Ruby风格指南以了解更多命名约定:https://github.com/bbatsov/ruby-style-guide#naming –

+0

https://stackoverflow.com/questions/612189/why-are-exclamation-marks-used-in-ruby-methods,看到这个,在ruby bang(!)中意思是改变它调用的对象的值。 – icemelt

回答

0

你的同事的功能是正确的,check_legal_age不是一个好名字,不是因为它的模糊,本身,而是因为它是误导因此很危险。这似乎意味着对象状态正在被检查或验证,实际上它正在被修改。

约定是一个改变内部对象状态的方法应该是一个“bang”!方法。简单地命名方法legal_age!可以将布尔属性设置为true

如果谓词方法(返回truefalse的谓词方法)以?结尾,则会更好。 legal_age?legal_age!对我来说似乎很清楚。

0

如果是,最好使用问号,并调用它像is_legal_age?

+1

虽然对于检查某些条件的方法正确,但OP希望知道一个约定,用于命名可以更改*值的方法。 – vijoc

相关问题