Desde mis comienzos siempre he ido utilizando la palabra clave “this”, desde C++ hasta ahora con C#. El por qué, es porque me ha resultado más comodo a la hora de escribir y me ha resultado más comprensible el código a la hora de entenderlo, de la misma forma que uso otra de las palabras clave de acceso como ‘base’, aunque ésta únicamente se utilice en clases derivadas.
Por otro lado, desde hace algo más de un año vengo utilizando Resharper de jetbrains, y pese que en la versión 4.0 noté ciertos problemas de rendimiento, ahora, con la versión 4.5 recién lanzada, la verdad es que me resulta una herramienta productiva y útil. Bien, la cuestión es que Resharper, por defecto, lanza un “warning” cuando encuentra un “this.” en el código e indica que se trata de una palabra redundante, y ciertamente en muchas de las ocasiones lo es, de la misma forma que lo es “base” o el uso del constructor de un delegado o el método ToString(), en algunas ocasiones. Pese a las “advertencias” he seguido utilizandola principalmente, y como he dicho, por comodidad y percepción de entendimiento del código y creí que estaba dentro de las “pautas de buenas practicas” el no usar redundancias dentro del código. A mi me la repampinfla. El uso de “this” no afecta al rendimiento ni me aporta ningún inconveniente, ergo seguiré utilizándola.
Sin embargo, de camino a casa, en el tren, he estado probando Microsoft StyleCop para la evaluación de sintaxis C# el cual he utilizado para comprobar el código de un servicio WCF, generado por el asistente de Visual Studio a partir de la plantilla de proyecto WCF Service Library. Esta plantilla implementa un DataContract (CompositeType) con un par de propiedades las cuales no hacen uso de la palabra clave “this” y StyleCop, al ejecutarlo, me ha dado un warning [SA1101]. Esto me ha echo pensar si realmente la supuesta doctrina de buenas practicas recomienda o no el uso de esta palabra clave, es decir si realmente existe como tal.
Más allá de lo trivial del asunto, he estado mirando por Internet y no he encontrado, o no he sabido encontrar, nada relativo a ello y es por ello que ahora, a parte de estar haciendo tiempo en el tren de caminito a casa, me pregunto, en modo de curiosidad, ¿vosostros utilizáis “this” en vuestros desarrollos?
this
1: [DataContract]
2: public class CompositeType
3: {
4: bool boolValue = true;
5: string stringValue = "Hello ";
6:
7: [DataMember]
8: public bool BoolValue
9: {
10: get { return this.boolValue; }
11: set { this.boolValue = value; }
12: }
13:
14: [DataMember]
15: public string StringValue
16: {
17: get { return this.stringValue; }
18: set { this.stringValue = value; }
19: }
20: }
not this
1: [DataContract]
2: public class CompositeType
3: {
4: bool boolValue = true;
5: string stringValue = "Hello ";
6:
7: [DataMember]
8: public bool BoolValue
9: {
10: get { return this.boolValue; }
11: set { boolValue = value; }
12: }
13:
14: [DataMember]
15: public string StringValue
16: {
17: get { return stringValue; }
18: set { stringValue = value; }
19: }
20: }
NOTA: Probablemente este código no describa el valor descriptivo del uso de this, pero es que no me ha dado tiempo de crear un código descritivo para tal fin.