Rob*_*ell 9 coding-style smalltalk
编辑:似乎至少有两个有效的理由说明为什么Smalltalkers这样做(在消息链接和范围界定问题期间的可读性)但是问题可能会保持更长时间以解决一般用法问题.
原文:由于我早已忘记的原因,我从不在变量名中使用文章.例如:
aPerson,theCar,anObject
我想我觉得文章用无意义的信息弄脏了名字.当我看到使用这个约定的同事的代码时,我的血压会略微上升哦.
最近我开始学习Smalltalk,主要是因为我想学习Martin Fowler,Kent Beck以及其他许多伟大成长和喜爱的语言.
然而,我注意到,Smalltalkers似乎在变量名中广泛使用不定冠词(a,an).一个很好的例子是在下面的Setter方法中:
name: aName address: anAddress.
self name: aName.
self address: anAddress
Run Code Online (Sandbox Code Playgroud)
这使我重新考虑我的立场.如果一个像Smalltalkers一样受到极大尊重和影响的社区已广泛采用变量命名的文章,那么可能有充分的理由.
你用它吗?为什么或者为什么不?
Jan*_*šek 10
它在Smalltalk中作为无类型语言通常使用,因为它暗示了方法调用中的参数类型.文章本身表明您正在处理指定类的某个对象的实例.
但请记住,在Smalltalk中,方法看起来有所不同,我们使用所谓的关键字消息,在这种情况下,文章实际上有助于提高可读性:
anAddressBook add: aPerson fromTownNamed: aString
Run Code Online (Sandbox Code Playgroud)
这个命名约定是Kent Beck的书Smalltalk Best Practice Patterns中的模式之一.恕我直言这本书甚至对于非小型人也是必备的,因为它确实有助于命名事物和编写自我记录代码.此外,它可能是少数几个没有名字展示亚历山大品质的图案语言之一.
关于代码模式的另一本好书是Smalltalk with Style,它以免费PDF格式提供.
通常,惯例是实例变量和访问器使用裸名词,参数使用不定冠词加上角色或类型或组合.临时变量可以使用裸名词,因为它们很少复制实例变量; 或者,这是相当频繁的不仅仅是一个不定冠词更精确他们的名字,以表明自己的控制流的作用:eachFoo,nextFoo,randomChild...
我想我刚刚找到了答案.正如Konrad Rudolph所说,由于技术原因,他们使用这个惯例:
...这意味着它[ 方法变量 ]不能复制实例变量的名称,接口中定义的临时变量或其他临时变量.- IBM Smalltalk教程
基本上,本地方法变量的名称不能与对象/类变量相同.来自Java,我假设一个方法的变量将是本地范围的,你可以使用类似的东西访问实例变量:
self address
Run Code Online (Sandbox Code Playgroud)
我仍然需要了解Smalltalk中有关方法/本地作用域的更多信息,但似乎没有其他选择; 它们必须使用与实例1不同的变量名,因此anAddress可能是最简单的方法.仅使用地址结果:
Name is already defined ->address
Run Code Online (Sandbox Code Playgroud)
如果你已经定义了一个实例变量地址 ...