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

Gqq*_*big 4 coding-style naming-conventions

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

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

Max*_*oel 10

那些方法名称是动词,而不是名词.equals是动词"平等"的第三人称形式(可能是疑问句 - 用于支持方法名称中经常被称为非字母数字字符的语言equals?),并且clone是动词"克隆"的第二人称命形式(你'重新订购对象:"克隆自己!").

一般情况下,你用的动词疑问句相对于另一个(即查询有关对象的状态信息的方法equals,contains,hasXXX...),为"行动"的方法(即让对象执行一些任务,例如使用的方法势在必行动词clone,add,show...很多时候,这些方法不返回任何东西),并为查询有关对象的状态信息,而无需任何引用外部(方法名词例如length,intValue,keys).请注意,这些名词可以是单数或复数,具体取决于方法返回的内容:单数形式的东西只能是单数(length),复数形式可以返回列表/地图/其他容器(keys).

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

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