为什么吸气剂的前缀是“get”?

时间:2010-04-15 19:50:40

标签: conventions

一般来说,创建流畅的API可以让所有程序员都满意;编写接口的创建者和编程接口的消费者。超越惯例,为什么我们在所有获取者前面添加单词“get”。省略它通常会产生更流畅,易于阅读的指令集,最终会带来快乐(无论是小的还是被动的)。考虑这个非常简单的例子。 (伪代码

常规:

person = new Person("Joey")
person.getName().toLower().print()

替代:

person = new Person("Joey")
person.name().toLower().print()

当然,这仅适用于getter / setter是常态的语言,但不适用于任何特定语言。这些约定是围绕技术限制(消歧),还是仅仅通过追求更明确,有意的感觉类型的界面而开发的,或者这可能仅仅是一种涓涓细流的情况。你的想法是什么?如何简单地改变这些惯例会影响你的快乐/日常态度(无论多么微小)。

感谢。

8 个答案:

答案 0 :(得分:10)

因为在没有属性的语言中,name()是一个函数。但是,如果没有更多的信息,它并不一定具体说明它正在做什么(或它将返回什么)。

函数/方法也应该是动词,因为它们正在执行某些操作。 name()显然不适合该法案,因为它不会告诉您它正在执行的操作。

getName()让您毫无疑问地知道该方法将返回一个名称。

在具有“属性”的语言中,某个属性属性的事实表达与获取或设置属性相同的含义。它只是让事情看起来有点整洁。

答案 1 :(得分:4)

我听过使用get / set前缀的最佳答案是这样的:

如果你没有使用它们,那么accessor和mutator(getter和setter)都会有相同的名字;因此,他们会超载。通常,只应在方法的每个实现执行类似的功能(但使用不同的输入)时重载方法。

在这种情况下,您将使用两个具有相同名称的方法来执行非常不同的功能,这可能会让API的用户感到困惑。

答案 2 :(得分:4)

在使用新API及其文档时,我始终感谢一致的get / set前缀。当所有函数按字母顺序列出时,getter和setter的自动分组极大地有助于区分简单数据访问和高级功能。

在IDE中使用智能感知/自动完成时也是如此。

答案 3 :(得分:3)

如果以动词命名属性,该怎么办?

object.action()

这是否会获得要执行的操作类型,或者执行操作...添加get / set / do会消除歧义,这总是一件好事......

object.getAction()
object.setAction(action)
object.doAction()

答案 4 :(得分:1)

在学校,我们被教导使用get来区分方法和数据结构。我永远不明白为什么这些parens不会是一个小费。我个人认为过度使用get / set方法可能是一个可怕的时间浪费,而且这是一个阶段我看到很多面向对象的程序员在他们开始后很快就会经历。

答案 5 :(得分:1)

这是我最喜欢的Smalltalk答案。人们必须知道关于Smalltalk BTW的一些规则。 字段只能在它们被定义时访问。如果你不写“访问者”,你将无法用它们做任何事情。

有一个变量的约定(让我们看看它是instVar1。 然后你编写一个函数instVar1,它只返回instVar1和instVar:设置 价值。

我最喜欢这个约定。如果你看到:在某个地方,你可以打赌它是一种“固定器”的一种或另一种方式。

答案 6 :(得分:0)

定制

另外,在C ++中,如果你返回一个引用,那么它会向类本身提供潜在的信息泄漏。

答案 7 :(得分:0)

我可能不会写很多Objective-C,但是自从我学会了它之后,我真的开始喜欢它的惯例。您要问的问题是语言addressed