将此/自指针强制显式有什么好处?

时间:2009-05-26 10:33:37

标签: language-agnostic oop programming-languages language-theory

明确指出<{3}}指针强制有什么好处?

根据this/self/me理论,一个方法应该主要(仅?)对成员变量和方法的参数进行操作。接下来,它应该更容易来引用成员变量而不是外部(来自对象的视图)变量......显式this使它更加冗长,因此更难< / strong>引用成员变量而不是外部变量。这对我来说似乎很直观。

6 个答案:

答案 0 :(得分:21)

除了成员变量和方法参数之外,您还有局部变量。关于该对象最重要的事情之一是其内部状态。显式成员变量解引用会非常清楚地引用该状态以及修改该状态的位置。

例如,如果您有以下代码:

someMethod(some, parameters) {
    ... a segment of code
    foo = 42;
    ... another segment of code
}

当快速浏览它时,你必须拥有前一段中定义的变量的心智模型,以了解它是否只是一个临时变量,还是它会改变对象的状态。而this.foo = 42显然对象状态是突变的。如果专门使用显式解除引用,则可以确保该变量在相反的情况下是临时的。

更短,考虑周全的方法使它变得不那么重要,但是,长期可理解性在编写代码时胜过一点便利。

答案 1 :(得分:4)

如果你在谈论Python的“显式self”,那么这个话题就是interesting discussion。这是Guido respondingBruce Eckel's article。关于布鲁斯的文章的评论也很有启发性(其中一些,无论如何)。

答案 2 :(得分:3)

如果方法的参数与成员变量同名,该怎么办?然后,您可以使用this.x = x。其中this.x是成员变量,x是方法参数。 这只是一个(微不足道的)例子。

答案 3 :(得分:3)

您需要它将指针/引用传递给其他地方的当前对象,或者防止在赋值运算符中进行自我赋值。

答案 4 :(得分:2)

我通常只在我编写赋值运算符复制构造函数时使用它(在C ++中),因为它有助于清楚地识别变量。我可以想到使用它的其他地方是你的函数参数变量名与你的成员变量名相同,或者我想用删除这个来杀死我的对象。

答案 5 :(得分:1)

例如,成员名称与传递给方法

的成员名称相同
public void SetScreenTemplate(long screenTemplateID, string screenTemplateName, bool isDefault)
        {
            this.screenTemplateID = screenTemplateID;
            this.screenTemplateName = screenTemplateName;
            this.isDefault = isDefault;
        }