函数名中的单数或复数动词?

时间:2014-01-19 23:41:08

标签: coding-style naming-conventions

以Java标准库为例,为什么Object.equals不是Object.equal?为什么Object.clone使用单数,而不是Object.clones?

为什么我看到几乎所有人在阅读和设置对象的属性时使用getXXXsetXXX,而不是获取或设置?

1 个答案:

答案 0 :(得分:9)

这些方法名称是动词,而不是名词。 equals是动词“相等”的第三人称形式(可能是疑问句 - 在语言中支持方法名称中的非字母数字字符,通常称为equals?),而clone是动词“克隆”的第二人命令形式(你命令对象:“克隆自己!”)。

通常,您使用疑问谓词来查询有关对象状态相对于另一个(equalscontainshasXXX ...)的信息,以及“动作”的命令式动词“方法(要求对象执行某些任务的方法,例如cloneaddshow ......通常这些方法不返回任何内容),以及方法的名词查询有关对象状态的信息,而不引用外部任何内容(例如lengthintValuekeys)。请注意,这些名词可以是单数或复数,具体取决于方法返回的内容:单数形式的东西只能是单数(length),复数形式可以返回列表/地图/其他容器({{1} })。

Getters是一种特殊情况,您可以使用动作动词(get)将这些方法“标记”为getter,并使用set的setter进行对称。

此外,getter / setter是C ++和Java中缺少属性的一种解决方法。在没有这种弱点的语言中,它们不存在:您使用属性,而那些是名词。