Coding style 变量名中是否使用冠词?

Coding style 变量名中是否使用冠词?,coding-style,smalltalk,Coding Style,Smalltalk,编辑:Smalltalker这样做似乎至少有两个正当的理由(在消息链接和范围界定问题期间的可读性),但也许这个问题可以保持更长的开放时间以解决一般用法 Original:由于我早已忘记的原因,我从不在变量名中使用冠词。例如: 人、车、物体 我想我感觉文章用毫无意义的信息把名字弄脏了。当我看到一个同事的代码使用这个约定时,我的血压会稍微升高 最近我开始学习Smalltalk,主要是因为我想学习Martin Fowler、Kent Beck和许多其他伟大人物成长并喜爱的语言 然而,我注意到,说小话的

编辑:Smalltalker这样做似乎至少有两个正当的理由(在消息链接和范围界定问题期间的可读性),但也许这个问题可以保持更长的开放时间以解决一般用法

Original:由于我早已忘记的原因,我从不在变量名中使用冠词。例如:

人、车、物体

我想我感觉文章用毫无意义的信息把名字弄脏了。当我看到一个同事的代码使用这个约定时,我的血压会稍微升高

最近我开始学习Smalltalk,主要是因为我想学习Martin Fowler、Kent Beck和许多其他伟大人物成长并喜爱的语言

然而,我注意到,说小话的人似乎在他们的变量名中广泛使用不定冠词(a,an)。下面的Setter方法就是一个很好的例子:

name: aName address: anAddress.
     self name: aName.
     self address: anAddress
这促使我重新考虑我的立场。如果一个像Smalltalkers这样受人尊敬和有影响力的社区广泛采用了变量命名的文章,也许有一个很好的理由

你用它吗?为什么

我总觉得这些文章用毫无意义的信息把名字弄脏了

没错。这就是删除文章的所有必要原因:它们不必要地混乱了代码,并且没有提供额外的信息


我不懂Smalltalk,也不能谈论“他们的”惯例的原因,但在其他地方,上述观点都成立。Smalltalk约定背后可能有一个简单的技术原因(比如Ruby中的
ALL_CAPS
,这不仅是约定的常量,而且是语言语义的原因)。

从未使用过,可能是因为在我的主语言中没有任何文章:p


无论如何,我认为只要变量的名称有意义,是否有文章并不重要,这取决于编码人员自己的喜好。

它在Smalltalk中作为一种无类型语言被广泛使用,因为它在方法调用中提示参数的类型。本文本身表明您正在处理指定类的某个对象的实例

但请记住,在Smalltalk中,方法看起来不同,我们使用所谓的关键字消息,在这种情况下,文章实际上有助于提高可读性:

anAddressBook add: aPerson fromTownNamed: aString

没有。我觉得这是对字符空间的浪费,并且侵蚀了代码的可读性。我可能会根据上下文使用名词的变体,例如Person vs People。比如说

ArrayList People = new ArrayList();
Person newPerson = new Person();
People.add(newPerson);

不,我没有。我不觉得这会增加代码库的可读性或可维护性,也不会以任何方式区分变量

另一个缺点是,如果鼓励使用变量名的文章,那么在代码库中使用变量名只是时间问题

var person = new Person();
var aPerson = GetSomeOtherPerson();
我想我刚刚找到了答案。正如康拉德·鲁道夫(Konrad Rudolph)所说,他们使用这一惯例是因为技术原因:

…这意味着[method variable]不能复制实例变量、接口中定义的临时变量或其他临时变量的名称。 -

基本上,局部方法变量的名称不能与对象/类变量的名称相同。来自Java,我假设一个方法的变量是局部作用域的,您可以使用如下方式访问实例变量:

self address
aRect <- [Rectangle createFromPoint: startPoint 
                    toPoint: otherPoint]
我仍然需要更多地了解Smalltalk中的方法/本地范围,但似乎他们别无选择;它们必须使用与实例不同的变量名,因此地址可能是最简单的方法。使用just address会导致:

Name is already defined ->address

如果在我工作的地方已经定义了实例变量地址…

,标准是在所有实例字段前面加上“the-”,在局部变量前面加上“my-”,在方法参数前面加上“a-”。我相信这是因为许多开发人员使用vi等文本编辑器,而不是IDE,它们可以在每个范围内显示不同的颜色

在Java中,我不得不说我更喜欢它,而不是编写setter,在setter中取消引用this

比较

public void setName(String name) {
    this.name = name;
}

public void setName(String aName) {
    theName = aName;
}

最重要的是要有一个标准,每个人都要遵守

我用这个来回摇晃。我认为这取决于在任何给定的时间里,我的项目中C++与目标C的比例。至于基础和推理,Smalltalk普及了对象是“事物”的概念。我认为这是一种强烈的推动,以第一人称描述课堂。在Python中,它类似于下面的代码片段。我真的希望我能记住足够多的SmallTalk,以便能写出一个“恰当”的例子

总的来说,它是一种对话式的程序可读性方法。以可变名称使用冠词只是整个习惯用法的一部分。围绕参数和消息选择器IIRC的命名也有一个习惯用法。比如:

self address
aRect <- [Rectangle createFromPoint: startPoint 
                    toPoint: otherPoint]

aRect这个命名约定是Kent Beck的书Smalltalk最佳实践模式中的模式之一。IMHO这本书是非小人必备的,因为它确实有助于命名事物和编写自文档代码。此外,它可能是少数几个展示的模式语言之一

另一本关于代码模式的好书是Smalltalk with Style,它是


通常,惯例是实例变量和访问器使用裸名词,参数使用不定冠词加上角色、类型或组合。临时变量可以使用简单的名词,因为它们很少复制实例变量;或者,为了表明它们在控制流中的作用,通常会更精确地命名它们:
eachFoo
nextFoo
randomChild

这是斯拉夫克语吗?我现在正在学习捷克语,由于缺少文章,我感到很沮丧