2017-08-15 95 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

相關問題