【发布时间】:2011-03-13 18:35:34
【问题描述】:
为什么 Java 方法名称如此广泛地使用“get”前缀?至少在我的 Java 程序中,有很多名称以“get”开头的方法。获取方法的百分比非常高。我开始觉得“得到”这个词因为通货膨胀而失去了意义。这是我的代码中的噪音。
我注意到在函数式/声明式编程和 PL/SQL 中使用了不同的命名约定。方法名称只是说明方法返回的内容。他们将使用account.amount() 和Time.isoFormattedDateString(Date date) 而不是account.getAmount() 或Time.getIsoFormattedDateString(Date date)。这对我来说非常有意义,因为函数的名称描述了评估方法的结果(假设没有副作用,无论如何都不应该有)。 “get”前缀似乎是多余的。
我刚刚开始阅读“清洁代码”一书。它说方法应该只做一件事,而那件事通常应该是以下之一:
- 通知某些对象有关事件,通常将事件作为参数传递。
- 询问有关某个对象的问题,通常使用形成自然语言语句的方法名称,将对象作为参数传递并返回布尔值。
- 获取某些内容,可能传递一些查找键或一些要转换的对象作为参数,并始终返回所需的对象/值。
我的问题是关于第三类的。这种方法除了“get”之外还有命名约定吗?您在选择方法名称/前缀时使用什么标准?
这是一个例子:
我有一个类有两个方法getDates() 和getSpecialDates()。 getDates() 只返回一个私有变量的值(对日期集合的引用)。据我了解,这是一个标准的吸气剂。 getSpecialDates() 不同;它调用getDates(),从另一个类中获取过滤器,应用过滤器并返回实际上是getDates() 的子集。
getSpecialDates() 方法可以命名为computeSpecialDates()、findSpecialDates()、selectSpecialDates() 或elicitSpecialDates() 或其他名称。或者我可以简单地将其命名为specialDates()。然后,为了保持一致性,我可以将 getDates() 重命名为 dates()。
为什么要区分应该以“get”为前缀的方法和不应该以“get”为前缀的方法,为什么还要为“get”寻找替换词?
【问题讨论】:
-
使用“getThis”和“getThat”不会失去它的意义,只要每个get都是真正的get。它确实有助于了解您在做什么。这不像编译器会说“哦,另一个得到?现在你只是在说......”
标签: java naming-conventions getter many-to-many