Hola,
Por primera vez en el blog, quiero hacer un análisis, en este caso el honor lo tiene ReSharper o también conocido como R#.
¿Qué es exactamente ReSharper?
ReSharper es un add-in de Visual Studio, y qué mejor para explicar qué hace que una libre traducción desde su página web:
Resharper resalta los errores de toda la solución al vuelo, soluciones instantaneas para dichos errores, más de 30 técnicas avanzadas de refactorización, herramientas de pruebas unitarias, funciones de búsqueda y navegación, formateado y limpieza de código, generación automatica de código y muchas cosas más para C#, VB.NET, ASP.NET, XML y XAML.
Vamos, que te hace de todo menos la cena
Yo soy de los que no muestran mucho interes de cara a un add-in de cualquier aplicación, pero me dió por probar este por recomendación y la verdad, no puedo vivir sin el.
Voy a comentar con unas cuentas screenshots algunas de las features que he ido viendo sobre ReSharper. Hay decenas y todavía tengo que descubrir muchas útiles jeje.
Crearé una pequeña app de consola puesto que para el caso, no necesitamos ni ejecutar los programas.
Si ir más lejos, nada más crear la aplicación, ReSharper ya nos está marcando cosas ( lo suele hacer cambiando el color a gris ):
Aquí vemos las directivas using en gris, si ponemos el ratón encima nos dice: “La directiva using no está siendo usada y puede ser borrada”
Lo mismo con el parámetro “args” del método Main, el cual nos dice que no está siendo usado.
Esto es bastante útil por varias razones, entre ellas, nos ayuda a refactorizar nuestro código y borrar todo aquello que no vale (Lo tipico, creas una ventana o algo y te mete 20 using del cual usarás 1-2.
Como si de Eclipse se tratara, ReSharper nos trae a Visual Studio una forma de ver los avisos y errores de un fichero de un solo vistazo:
Cada rayita indica algo, las naranjas son avisos, las rojas errores, azules son TODO’s que pongas…
Luego también como hacen muchos IDE’s de Java, tenemos ayuda basada en el contexto ( donde tengamos el cursor vaya), por ejemplo si pinchamos en args, nos saldrá un icono, el cual nos ofrece varias opciones:
Borrar el parámetro, crear una sobrecarga sin parámetro, ignorar el mensaje…
Todo esto y todavía no hemos escrito nada jeje.
Ahora imaginad que escribo algún atributo privado
¿Qué es esa linea azul? Si dejamos el ratón encima nos dirá (aparte de que no está siendo usada) que el atributo no cumple con la convención de atributos privados, te sugiere que lo cambies por: “_mensaje”.
Ahora vamos a crear una propiedad autoimplementada y la usamos en nuestro main:
Nada extraño, pero si nos fijamos en el get vemos que tiene otra linea azul. Si dejamos ahi el cursor nos dice que el get no está siendo usado, que podemos borrarlo. Es aquí otra ayuda a la refactorización.
Vamos a crear una clase que nos sirva para más ejemplos: (La pongo en imagen para ver otro aviso de ReSharper)
Nada nuevo aquí, pero oh, ReSharper a marcado el this… Nos dice que el this aquí es redundante.
Bueno, de vuelta al Main, vamos a crear una lista de Libros:
Uh, ReSharper se ha cebado con la creacion de la lista…
¿Por qué marca el List
En este caso quedaría así:
var libros = new List<Libro>();
No es que nos estemos volviendo dinámicos estilo Python, simplemente consideran que no es necesario ver dos veces List
¿Y el new? Aquí es donde entra un poco de la magia de ReSharper. Nos ofrece la posibilidad de fusionar las lineas de abajo y meterlas en la inicialización de la Lista.
Finalmente todo quedaría así:
¿Mola eh?
Ahora imaginad que quereis cambiar los temas de “Prog” a “Programación”, podéis hacer algo en plan:
Nada mal, pero… ¿Qué sale debajo del foreach? ¿Dice que parte del foreach puede convertirse a algo LINQ? ¿Y que lo hará por nosotros? Pos fale.
Esto ya mola más, ¿Eh? Ahora tenemos un foreach que itera por aquellos libros que son de programación. O sea, ya es más rápido.
Vamos a hacer la lista de libros más grande, con más temas:
var libros = new List<Libro>
{
new Libro("Programacion", "C# In Depth"),
new Libro("Cocina", "Cocina para novatos"),
new Libro("Programacion", "Linq In Action"),
new Libro("Redes", "Cisco CCNA"),
new Libro("Bases de datos", "SQL Server 2008"),
new Libro("Cocina", "Como cocinar pescado")
};
Ahora imaginad que queremos crear una segunda lista de libros que solo contenga los de informática:
Ahora los dos foreach están marcados, y en estos casos es mejor empezar por el externo e ir aplicando los que nos dice ya que muchas veces afecta a lo de adentro (de una forma positiva claro).
En este caso nos dice que todo el bucle puede convertirse en algo LINQ:
var librosInformatica = (from tema in temas from libro in libros where libro.Tema == tema select libro).ToList();
Aunque a veces puede salir con un:
var librosInformatica = temas.SelectMany(tema => libros.Where(libro => libro.Tema == tema)).ToList();
Ambos hacen lo mismo, no sé por qué a veces te lo convierte de una forma y a veces de otra, aunque la cosa es que te quita los 2 bucles y el if
Y bueno, esto es solo la punta del iceberg de lo que ReSharper nos ofrece…
Es capaz de analizar tu código y decirte cuando algo que tienes público puede ser privado, te avisa cuando usas una variable que podría contener null y tu no lo has comprobado antes, te da soluciones para reducir anidamiento… Y luego ya lo tipico, mover código a métodos, cambiar nombre… Vamos, todo lo que hay para refactorizar código.
Por último, decir que todo esto es configurable a través de reglas las cuales pueden ser modificadas, borradas y incluso crear las tuyas propias.
¿Lo malo? Que la licencia es de pago. Tienes un trial de 30 días también. Merece la pena conseguirlo
Os dejo un enlace a la página oficial y otro a su lista de features:
http://www.jetbrains.com/resharper/
http://www.jetbrains.com/resharper/features/index.html
Nada más, un saludo y si os gusta, comentad
Tags: Add-in, Visual Studio


Jummmm parece sumamente interesante. La licencia vale un pastizal, pero desde luego en el entorno de desarrollo de alguna empresa puede resultar realmente accesible. Molar, mola desde luego.
Si que vale, siempre puedes pillar la academic o la gratis de Open Source (si puedes). Vamos, que cada uno haga lo que quiera con la informacion que le doy