programming-languages multiple-languages

programming languages - ¿Hay alguna razón para no usar "esto"("Self", "Me",...)?



programming-languages multiple-languages (15)

''esta.'' en el código siempre me sugiere que el codificador ha usado intellisense (u otros equivalentes IDE) para hacer su trabajo pesado.

Ciertamente soy culpable de esto, sin embargo lo hago, por razones puramente de vanidad, lo elimino después.

Las únicas otras razones por las que los uso son para calificar una variable ambigua (mala práctica) o construir un método de extensión

Calificando una variable

string name; //should use something like _name or m_name public void SetName(string name) { this.name = name; }

Leí esta respuesta y sus comentarios y tengo curiosidad: ¿Hay alguna razón para no usar this / Self / Me ?

Por cierto: lo siento si esto se ha preguntado antes, parece que es imposible buscar la palabra en SO.


Aclara en algunos casos, como este ejemplo en c #:

public class SomeClass { private string stringvar = ""; public SomeClass(string stringvar) { this.stringvar = stringvar; } }


Advertencia: respuesta puramente subjetiva a continuación.

Creo que la mejor "razón" para no usar este / self / me es la brevedad. Si ya es una variable / función miembro, ¿por qué agregar el prefijo de forma redundante?

Personalmente, evito el uso de this / self / me a menos que sea necesario eliminar la ambigüedad de una expresión particular para el compilador. Muchas personas no están de acuerdo con esto, pero nunca lo he tenido como un verdadero punto de fricción en ningún grupo para el que haya trabajado.


Al final, siempre es una cuestión de elección personal. Personalmente, utilizo esta convención de codificación:

public class Foo { public string Bar { get { return this.bar; } /*set { this.bar = value; }*/ } private readonly string bar; public Foo(string bar) { this.bar = bar; } }

Entonces para mí "esto" es realmente necesario para mantener el constructor legible.

Editar: el mismo ejemplo exacto fue publicado por "sinje" mientras escribía el código anterior.


Creo que esto no es un problema, ya que solo agrega más legibilidad al código, lo cual es algo bueno.

Para algunos idiomas, como PHP, incluso es obligatorio prefijar con $ this-> si necesita usar campos o métodos de clase.

No me gusta el hecho de que hace que algunas líneas sean innecesariamente más largas de lo que podrían ser, si PHP tuviera alguna manera de hacer referencia a los miembros de la clase sin ella.


Creo que la mayoría de los escenarios comunes se han cubierto en las dos publicaciones ya citadas; principalmente brevedad y redundancia vs claridad - una adición menor: en C #, se requiere el uso de "esto" para acceder a un "método de extensión" para el tipo actual - es decir,

this.Foo();

donde Foo() se declara externamente como:

public static void Foo(this SomeType obj) {...}


En VB.NET, una de las prácticas más comunes que uso es el siguiente código:

Class Test Private IntVar AS Integer Public Function New(intVar As Integer) Me.Intvar = intvar End Function End Class

No todo el tiempo, pero sobre todo Me / this / self es bastante útil. Aclara el alcance del que está hablando.


En un método setter típico (tomado de la respuesta de Lagerdalek):

string name; public void SetName(string name) { this.name = name; }

Si no lo usaste, el compilador no sabría que te referías a la variable miembro.
El uso de this. es decirle al compilador que necesita acceder a una variable miembro, que está fuera del alcance inmediato del método. Crear una variable dentro de un método que es el mismo nombre que una variable miembro es perfectamente legal, al igual que anular un método en una clase que ha extendido otra clase es perfectamente legal.
Sin embargo, si aún necesita usar el método de la superclase, usa super. En mi opinión, usando esto. no es peor que usar super. y le permite al programador más flexibilidad en su código.

En lo que a mí respecta, la legibilidad ni siquiera llega, se trata de la accesibilidad de tus variables.


Eso me parece una tontería. Usar ''esto'' puede hacer que el código sea más agradable, y no veo problemas con él. Las políticas como esa son estúpidas (al menos cuando ni siquiera le dices a la gente por qué están en su lugar).


No solo uso con frecuencia "esto". A veces uso "eso".

class Foo { private string bar; public int Compare(Foo that) { if(this.bar == that.bar) { ...

Y así. "Eso" en mi código usualmente significa otra instancia de la misma clase.


Personalmente encuentro que esto. this.whatever que this.whatever es menos legible. Puede que no note la diferencia en un método de 2 líneas, pero espere hasta que obtenga this.variable y this.othervariable en todas partes en una clase.

Además, creo que el uso de this. fue encontrado como un reemplazo de una parte de la notación húngara muy odiada. Algunas personas descubrieron que aún es más claro para el lector ver que una variable es un miembro de la clase, y this. Hizo el truco. Pero, ¿por qué engañarnos a nosotros mismos y no usar el simple antiguo "m_" o simplemente "_" para eso, si necesitamos una mayor claridad? Son 5 personajes contra 2 (o incluso 1). Menos tipeo, mismo resultado.

Habiendo dicho eso, la elección del estilo sigue siendo una cuestión de preferencia personal. Es difícil convencer a alguien que solía leer el código de cierta manera que es útil para cambiarlo.


Si usas StyleCop con todas las reglas, te hace poner this. in. Desde que comencé a usarlo, encuentro que mi código es más legible, pero esa es una preferencia personal.


bueno, eclipse hace campos de color, argumentos y variables locales en diferentes colores, por lo que al menos trabajar en un entorno de eclipse no es necesario distinguir sintácticamente los campos para marcarlos especialmente como "campos" para usted y las generaciones venideras.


en cuanto a mí, yo uso this para llamar a los métodos de un objeto instanciado, mientras que self es para un método estático


Se preguntó antes, de hecho, en el contexto de "variable en Java":

¿Prefija su variable de instancia con ''this'' en java?

La principal razón recurrente parece ser:

"Aumenta el ruido visual que necesita para examinar el significado del código".

Legibilidad, en otras palabras ... que no compro, encuentro this. muy útil.