.net - plugin - ReSharper y var
resharper que es (7)
Posible duplicado:
¿Por qué ReSharper quiere usar ''var'' para todo?
Tengo ReSharper 4.5 y lo he encontrado invaluable hasta ahora, pero tengo una preocupación;
Parece querer hacer implícita cada declaración de variable (var).
Como desarrollador relativamente nuevo , ¿cuánto debo confiar en ReSharper cuando se trata de esto?
Tome el siguiente fragmento de código de un método que pinta los encabezados de la pestaña.
TabPage currentTab = tabCaseNotes.TabPages[e.Index];
Rectangle itemRect = tabCaseNotes.GetTabRect(e.Index);
SolidBrush fillBrush = new SolidBrush(Color.Linen);
SolidBrush textBrush = new SolidBrush(Color.Black);
StringFormat sf = new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
Resharper quiere que cambie los 5 de esos a var . He leído la siguiente publicación similar, Uso de la palabra clave var en C # , pero me gustaría saber desde el punto de vista de ReSharper.
De hecho puedes apagarlo, y lo he hecho. Admito que es bueno en algunos casos donde el nombre del tipo de clase es largo, como:
SuperDisconfibulator sd=new SuperDisconfibulator();
Sería un buen candidato para ser acortado a var, pero personalmente esa es la única vez que querría que cambie. No creo que sea una buena idea usarla cuando se asigna una variable a partir del valor de retorno de un método (como en la segunda línea), ya que podría no estar claro de inmediato cuál es exactamente el tipo de variable que devuelve.
En C #, prefiero usar var
todas partes. ¿Por qué? Por la misma razón que uso el primer nombre en lugar de strFirstName
o la amount
lugar de intAmount
. Claro, la forma más verbosa es más legible en un pedazo de papel o, como usted señaló, en un libro, pero ninguno de mis códigos ha aparecido en un libro todavía.
Ahora, hace un tiempo le pregunté a un compañero de trabajo sobre este asunto intAmount
y él mencionó un muy buen punto. Dijo que es útil en un editor de texto directo, pero cuando tiene Intellisense, puede obtener la misma información y más simplemente al pasar el cursor sobre la variable.
Por último, aunque aprecio el medio feliz que otros han señalado (es decir, el uso de var
con la new
declaración) y el argumento es válido y sólido, me inclino a apartarme de él sobre la única base de coherencia y legibilidad de mano corta. . Mi argumento de coherencia es que si la legibilidad es tan importante para usted, ¿por qué no usa también intAmount
para poder indicar el tipo de datos más adelante en el código?
Esta pregunta es una muy buena manera de comenzar una guerra de llamas. Sin embargo, debe hacer lo que sea más legible para usted y con quien esté trabajando. Hay buenos argumentos para ambos lados del debate sobre var.
Dicho esto, si crees que es más legible declarar explícitamente el tipo, ese es tu negocio. No tienes que hacer todo lo que Resharper te dice que hagas. Incluso puedes deshabilitar esa regla si quieres.
No es necesario tener el tipo en la línea para que sea más legible, es una cuestión de preferencia personal. Me gusta la var variación:
var currentTab = tabCaseNotes.TabPages[e.Index];
var itemRect = tabCaseNotes.GetTabRect(e.Index);
var fillBrush = new SolidBrush(Color.Linen);
var textBrush = new SolidBrush(Color.Black);
var sf = new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
Actualización: Agregaré una opinión controvertida sobre él. A menos que esté leyendo el código de un libro, generalmente no me importa cuál es el tipo específico para entender algunas líneas de código que estoy leyendo. Considere el .GetTableRectangle (e.Index), para el cual no está mostrando el código que opera en él:
var itemRect = tabCaseNotes.GetTableRectangle(e.Index);
//do some operations on itemRect
Al leer ese código específico, obtendré más para entenderlo de las operaciones en itemRect que de su tipo. Puede ser IRectangle, Rectangle, CustomRectangle, y todavía no dirá mucho sobre lo que el código está haciendo con él. En cambio me preocupo más por el itemRect.Height, itemRect.Width o itemRect.GetArea () junto con la lógica involucrada.
Actualización 2: Como otros han señalado, puedes apagarlo. Asegúrese de mantener al equipo con las mismas prácticas, o probablemente terminará haciendo cambios de una manera u otra cada vez que una persona diferente toque el código. Consulte: http://www.jetbrains.com/resharper/features/codeTemplate.html
Resharper no quiere que uses var
, te da la opción. Si usas var
, entonces tendrás la opción de usar un tipo explícito, por lo que no puedes ganar :-).
EDITAR - interesante link discutiendo el tema.
Parece que puede desactivarse, vaya a Resharper -> Opciones -> Inspección de código -> Gravedad de inspección y desplácese hacia abajo para ver las opciones relacionadas con la var
.
Resharper piensa que es la mejor práctica, pero algunas personas no están de acuerdo con lo que has leído en la publicación vinculada. Me gusta usar la declaración explícita para una mayor legibilidad, pero a cada uno lo suyo. Si desea utilizar una declaración explícita, puede deshabilitar la regla en Resharper.
Resharper se ocupa principalmente de ayudarlo a refactorizar el código, y la palabra clave var
generalmente facilita la refactorización. Por ejemplo, si los valores de retorno de cualquiera de esas funciones alguna vez cambian a un tipo compatible , no tiene que cambiar ninguno de este código. Por lo tanto, ahora es un poco más fácil refactorizar su tipo tabCaseNotes
, por ejemplo.
Personalmente, a menudo me inclino a dejar sus primeras dos líneas solas, porque me gusta ver el nombre de tipo para una variable que aparece explícitamente en algún lugar de la línea donde se declara la variable. En todo caso, podría buscar una interfaz para usar en su lugar, de modo que también obtenga el mismo "carácter genérico" que con la palabra clave var
sin perder ninguna información importante de tipo legible. Sin embargo, definitivamente usaría var
para fillBrush
, textBrush
y sf
.