Question

Quel est l'avantage d'avoir this / self / me pointeur obligatoire explicite?

Selon POO théorie une méthode est censée fonctionner principalement (seulement?) Sur variables membres et les arguments de la méthode. Par la suite, il devrait être plus facile pour faire référence aux variables membres qu'à externe (du côté de l'objet de vue) des variables ... Explicite this rend plus bavard donc difficile reportez-vous aux variables membres que de ceux externes. Cela me semble contre-intuitif de.

Était-ce utile?

La solution

En plus des variables membres et les paramètres de la méthode que vous avez également des variables locales. L'une des choses les plus importantes au sujet de l'objet est son état interne. Explicite déréférencement variable membre, il est très clair où vous faites référence à cet état et où vous modifiez cet état.

Par exemple, si vous avez du code comme:

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

lorsque vous naviguez rapidement, vous devez avoir un modèle mental des variables définies dans le segment précédent pour savoir si elle est juste une variable temporaire ou est-il muter l'état des objets. Alors que this.foo = 42 rend évident que l'état des objets est muté. Et si le déréférencement explicite est exclusivement utilisé, vous pouvez être sûr que la variable est temporaire dans le cas contraire.

Shorter, des méthodes bien affacturées font un peu moins important, mais encore, compréhensibilité à long terme l'emporte un peu de commodité tout en écrivant le code.

Autres conseils

Si vous parlez de « self explicite » dans le sens de Python, voici un discussion intéressante sur le sujet. Voici Guido répondre article de Bruce Eckel . Les commentaires sur l'article de Bruce sont également éclairantes (certains d'entre eux, de toute façon).

Vous avez besoin de passer le pointeur / référence à l'objet en cours ailleurs ou pour se protéger contre l'auto-affectation dans un opérateur d'affectation.

Et si les arguments à une méthode ont le même nom que les variables membres? Ensuite, vous pouvez utiliser this.x = x par exemple. Où this.x est la variable membre et x est l'argument de la méthode. C'est juste un (trivial) par exemple.

J'utilise généralement ce (en C ++) seulement quand je suis en train d'écrire le opérateur d'affectation ou constructeur de copie car elle contribue à identifier clairement les variables. Autre endroit où je peux penser à l'utiliser est si vos noms de variables de paramètres de fonction sont les mêmes que vos membres noms de variables ou je veux tuer mon objet en utilisant supprimer ce .

Par exemple, serait où les noms de membres sont les mêmes que ceux qui sont passés à la méthode

public void SetScreenTemplate(long screenTemplateID, string screenTemplateName, bool isDefault)
        {
            this.screenTemplateID = screenTemplateID;
            this.screenTemplateName = screenTemplateName;
            this.isDefault = isDefault;
        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top