Domanda

Qual è il vantaggio di avere this / self / me puntatore obbligatoria esplicito?

OOP teoria si suppone un metodo di operare principalmente (solo?) Su variabili membro e gli argomenti del metodo. Seguendo questo, dovrebbe essere semplice per fare riferimento a variabili membro che a esterno (dal lato dell'oggetto di immagine) variabili ... this esplicita rende più dettagliato quindi difficile per fare riferimento a variabili utente che a quelli esterni. Questo sembra contro intuitivo per me.

È stato utile?

Soluzione

In aggiunta alle variabili e parametri di metodo si hanno anche le variabili locali. Una delle cose più importanti circa l'oggetto è il suo stato interno. variabile membro esplicita dereferenziazione rende molto chiaro dove si fa riferimento a quello stato e dove si sta modificando quello stato.

Per esempio, se si dispone di codice come:

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

quando rapidamente la navigazione attraverso di essa, è necessario disporre di un modello mentale delle variabili definite nel segmento precedente di sapere se è solo una variabile temporanea o lo fa mutare lo stato degli oggetti. Mentre this.foo = 42 rende evidente che lo stato degli oggetti è mutato. E se dereferenziazione esplicito viene utilizzato esclusivamente, si può essere sicuri che la variabile è temporaneo nel caso opposto.

Shorter, metodi ben ceduti lo rendono un po 'meno importante, ma ancora, la comprensibilità lungo termine trionfi un po' di praticità durante la scrittura del codice.

Altri suggerimenti

Se si sta parlando di "self esplicita", nel senso di Python, ecco un interessante discussione sul tema. Ecco Guido rispondere per di Bruce Eckel articolo . I commenti su un articolo di Bruce sono anche illuminante (alcuni di loro, comunque).

È necessario che passi il puntatore / riferimento all'oggetto corrente altrove o per la protezione contro l'auto-assegnazione a un operatore di assegnazione.

Che cosa succede se gli argomenti di un metodo hanno lo stesso nome delle variabili membro? Quindi è possibile utilizzare this.x = x per esempio. Dove this.x è la variabile membro e x è l'argomento metodo. Questo è solo un (banale) esempio.

Io in genere uso questo (in C ++) solo quando scrivo il operatore di assegnazione o costruttore di copia in quanto aiuta a identificare chiaramente le variabili. Altro posto dove posso pensare di utilizzare è se i vostri nomi delle variabili dei parametri funzione sono gli stessi vostri nomi variabile membro o mi vogliono uccidere il mio oggetto utilizzando cancellare questo .

Ad esempio, sarebbe dove i nomi dei membri sono gli stessi di quelli passati al metodo

public void SetScreenTemplate(long screenTemplateID, string screenTemplateName, bool isDefault)
        {
            this.screenTemplateID = screenTemplateID;
            this.screenTemplateName = screenTemplateName;
            this.isDefault = isDefault;
        }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top