Frage

Was ist der Vorteil von this / self / me Zeiger obligatorisch explizit?

Nach OOP Theorie wird ein Verfahren soll in erster Linie für den Betrieb (nur?) Auf Membervariablen und Argumente der Methode. Im Anschluss daran sollte es leichter , um sich auf Membervariablen als auf externe (von der Seite des Objekts aus gesehen) Variablen ... Explicit this macht es ausführlicher so härter beziehen sich auf Membervariablen als zu externen. Dies scheint unlogisch zu mir.

War es hilfreich?

Lösung

Neben Membervariablen und Methodenparameter Sie auch lokale Variablen haben. Eines der wichtigsten Dinge über das Objekt ist sein interner Zustand. Explizite Membervariable dereferenzierenden macht es sehr klar, wo Sie verweisen diesen Zustand und wo Sie diesen Zustand modifizieren.

Zum Beispiel, wenn Sie Code wie:

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

, wenn schnell durch sie surfen, haben Sie ein mentales Modell der Variablen in dem vorhergehenden Segment definiert haben zu wissen, ob es nur eine temporäre Variable ist oder hat sie die Objekte Zustand mutieren. Während this.foo = 42 macht deutlich, dass die Objekte Zustand mutiert ist. Und wenn explizite Dereferenzierung ausschließlich verwendet wird, können Sie sicher sein, dass der Variable im entgegengesetzten Fall nur vorübergehend ist.

Shorter, gut einkalkuliert Methoden machen es ein bisschen weniger wichtig, aber immer noch, trumpft langfristig Verständlichkeits ein wenig Komfort, während der Code zu schreiben.

Andere Tipps

Wenn Sie sprechen über „explicit self“ im Sinne von Python, hier ist ein interessante Diskussion zum Thema. Hier Guido reagiert auf Bruce Eckel Artikel . Die Kommentare zu Bruce Artikel sind auch aufklären (einige von ihnen jedenfalls).

Sie müssen es den Zeiger / Verweis auf das aktuelle Objekt an anderer Stelle weitergeben oder gegen Selbstzuweisung in einem Zuweisungsoperator zu schützen.

Was passiert, wenn die Argumente ein Verfahren haben den gleichen Namen wie die Membervariablen? Dann können Sie this.x = x zum Beispiel verwenden. Wo this.x ist die Membervariable und x ist die Methode Argument. Das ist nur ein (triviales) Beispiel.

ich dies in der Regel verwenden (in C ++) nur dann, wenn ich die schreibe Zuweisungsoperator oder Copykonstruktor , wie es deutlich in hilft, die Variablen zu identifizieren. Anderer Ort, an dem ich denken kann, es zu benutzen ist, wenn Ihre Funktionsparameter Variablennamen identisch sind als Mitglied Variablennamen oder ich mag, dass meine Aufgabe töten mit delete this .

Zum Beispiel wäre, wenn Mitgliedsnamen gleich sind wie diejenigen Methode übergeben

public void SetScreenTemplate(long screenTemplateID, string screenTemplateName, bool isDefault)
        {
            this.screenTemplateID = screenTemplateID;
            this.screenTemplateName = screenTemplateName;
            this.isDefault = isDefault;
        }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top