访问实例变量或自我更好吗?

时间:2018-03-29 19:21:28

标签: methods smalltalk pharo squeak

所以我有这个课程Counter和一个名为increment

的方法
Object subclass: #Counter
    instanceVariableNames: 'count'
    classVariableNames: ''
    poolDictionaries: ''
    category: 'Pharo-MOOC'

那么在Smalltalk / Squeak / Pharo中哪个是惯用的还是更好?

increment
    "add 1 to the instance variable (count)"
    self count: self count + 1.

increment
    "add 1 to the instance variable (count)"
    count := count + 1.

当然,为什么?

1 个答案:

答案 0 :(得分:3)

两者都是等同的。 在性能方面,编译器可能会优化那些setter和getter,因此你不会发送任何额外的消息。 现在,两种方法都有优点和缺点。我现在能想到的是:

  • 第一个更易于在未来的子类中进行细化(因为它们提供了另一个用于修改的钩子)。
  • 第二个(通常)更具可读性。

如果我没记错的话,Kent Beck在他的“Smalltalk Best Practice Patterns”一书中推荐了第一种方法。但是,任何模式,都不是一成不变的规则。但是,一般来说,你应该避免创建setter ......

在我的情况下,我经常采用第一种方法,但我将我的二传手放入私人协议:)