language-agnostic - what - tutorial de django
¿Cuál es la ventaja de tener este/puntero auto obligatorio explícito? (6)
¿Qué sucede si los argumentos de un método tienen el mismo nombre que las variables miembro? Entonces puedes usar this.x = x
por ejemplo. Donde this.x
es la variable miembro y x
es el argumento del método. Eso es solo un ejemplo (trivial).
¿Cuál es la ventaja de tener this/self/me puntero obligatorio explícito?
De acuerdo con la teoría de la OOP , se supone que un método opera principalmente (¿solo?) En las variables de los miembros y los argumentos del método. Después de esto, debería ser más fácil referirse a las variables miembro que a las variables externas (desde el lado de la vista del objeto) ... Explícito, this
hace que sea más detallado, por lo que es más difícil referirse a las variables miembro que a las externas. Esto me parece contrario a lo intuitivo.
Además de las variables miembro y los parámetros del método, también tiene variables locales. Una de las cosas más importantes sobre el objeto es su estado interno. La desreferenciación explícita de la variable miembro deja muy claro dónde está haciendo referencia a ese estado y dónde está modificando ese estado.
Por ejemplo, si tienes código como:
someMethod(some, parameters) {
... a segment of code
foo = 42;
... another segment of code
}
cuando se navega rápidamente a través de él, debe tener un modelo mental de las variables definidas en el segmento anterior para saber si es solo una variable temporal o si muta el estado de los objetos. Mientras que this.foo = 42 hace obvio que el estado de los objetos está mutado. Y si se usa exclusivamente la desreferenciación explícita, puede estar seguro de que la variable es temporal en el caso opuesto.
Más cortos, los métodos bien factorizados hacen que sea un poco menos importante, pero aún así, la comprensión a largo plazo triunfa sobre la conveniencia al escribir el código.
Generalmente uso esto (en C ++) solo cuando estoy escribiendo el operador de asignación o el constructor de copia, ya que ayuda a identificar claramente las variables. Otro lugar en el que puedo pensar en usarlo es si los nombres de las variables de parámetros de función son los mismos que los nombres de las variables miembro o si deseo eliminar mi objeto al eliminar esto .
Lo necesita para pasar el puntero / referencia al objeto actual en otro lugar o para protegerse contra la autoasignación en un operador de asignación.
Por ejemplo, sería donde los nombres de los miembros son los mismos que los que se pasan al método.
public void SetScreenTemplate(long screenTemplateID, string screenTemplateName, bool isDefault)
{
this.screenTemplateID = screenTemplateID;
this.screenTemplateName = screenTemplateName;
this.isDefault = isDefault;
}
Si está hablando de " self
explícito" en el sentido de Python, aquí hay una discusión interesante sobre el tema. Aquí está Guido respondiendo al artículo de Bruce Eckel . Los comentarios sobre el artículo de Bruce también son esclarecedores (algunos de ellos, de todos modos).