Pregunta

¿Cuál es la ventaja de tener this / self / me puntero obligatorio explícito?

De acuerdo con POO teoría se supone un método para operar principalmente (sólo?) De variables miembro y los argumentos del método. Después de esto, debería ser más fácil para referirse a variables miembro que a la externa (desde el lado del objeto de la vista) las variables ... this explícita hace que sea más detallado de este modo más duro a se refieren a variables miembro que a los externos. Esto parece contra intuitivo para mí.

¿Fue útil?

Solución

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. Explícita variable miembro desreferenciar hace que sea muy claro, donde se hace referencia a ese estado y donde va a modificar ese estado.

Por ejemplo, si usted tiene un código como:

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

al navegar rápidamente a través de él, usted tiene que tener un modelo mental de las variables definidas en el segmento anterior para saber si es sólo una variable temporal o lo hace mutar el estado objetos. Considerando this.foo = 42 hace obvio que el estado objetos está mutado. Y si desreferenciar explícita se utiliza exclusivamente, puede estar seguro de que la variable es temporal en el caso contrario.

Shorter, métodos bien por coeficientes que sea un poco menos importante, pero aún así, la comprensibilidad largo plazo eclipsa un poco mayor comodidad al escribir el código.

Otros consejos

Si se habla de "self explícita" en el sentido de Python, he aquí un interesante discusión sobre el tema. Aquí es Guido responder a de Bruce Eckel artículo . Las observaciones sobre el artículo de Bruce también se esclarecedor (algunos de ellos, de todos modos).

Es necesario que pase el puntero / referencia al objeto actual en otro lugar o para proteger contra la auto-asignación en un operador de asignación.

¿Qué pasa si los argumentos a un método tienen el mismo nombre que las variables miembro? A continuación, puede utilizar this.x = x por ejemplo. Donde this.x es la variable miembro y x es el argumento de un método. Eso es sólo un ejemplo (trivial).

Yo generalmente uso de este (en C ++) sólo cuando estoy escribiendo en el operador de asignación o constructor de copia , ya que ayuda a identificar claramente las variables. Otros sitios donde puedo pensar en usar es si sus nombres de las variables de los parámetros de función son los mismos que los nombres de las variables miembro o que quieren matar a mi objeto utilizando eliminar este .

Ej estaría donde nombres de los miembros son iguales que los pasa al método

public void SetScreenTemplate(long screenTemplateID, string screenTemplateName, bool isDefault)
        {
            this.screenTemplateID = screenTemplateID;
            this.screenTemplateName = screenTemplateName;
            this.isDefault = isDefault;
        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top