<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>El Blog de Fox &#187; Add-in</title>
	<atom:link href="http://blog.foxandxss.net/tag/add-in/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.foxandxss.net</link>
	<description>Fomentando el desarrollo libre bajo .NET</description>
	<lastBuildDate>Tue, 01 Nov 2011 23:32:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Analizando ReSharper</title>
		<link>http://blog.foxandxss.net/analizando-resharper</link>
		<comments>http://blog.foxandxss.net/analizando-resharper#comments</comments>
		<pubDate>Sun, 14 Mar 2010 20:01:58 +0000</pubDate>
		<dc:creator>Fox</dc:creator>
				<category><![CDATA[Análisis]]></category>
		<category><![CDATA[Add-in]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://blog.foxandxss.net/?p=184</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Hola,</p>
<p>Por primera vez en el blog, quiero hacer un análisis, en este caso el honor lo tiene <b>ReSharper</b> o también conocido como <b>R#</b>.</p>
<p>¿Qué es exactamente ReSharper?<br />
<span id="more-184"></span><br />
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:</p>
<blockquote><p>
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.
</p></blockquote>
<p>Vamos, que te hace de todo menos la cena <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>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.</p>
<p>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.</p>
<p>Crearé una pequeña app de consola puesto que para el caso, no necesitamos ni ejecutar los programas.</p>
<p>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 ):</p>
<p><a href="http://blog.foxandxss.net/cosasblog/resharper/1.JPG"><img alt="" src="http://blog.foxandxss.net/cosasblog/resharper/1.JPG" class="alignnone" width="461" height="239" /></a></p>
<p>Aquí vemos las directivas using en gris, si ponemos el ratón encima nos dice: &#8220;La directiva using no está siendo usada y puede ser borrada&#8221;</p>
<p>Lo mismo con el parámetro &#8220;args&#8221; del método Main, el cual nos dice que no está siendo usado.</p>
<p>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.</p>
<p>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:</p>
<p><a href="http://blog.foxandxss.net/cosasblog/resharper/2.JPG"><img alt="" src="http://blog.foxandxss.net/cosasblog/resharper/2.JPG" class="alignnone" width="399" height="176" /></a></p>
<p>Cada rayita indica algo, las naranjas son avisos, las rojas errores, azules son TODO&#8217;s que pongas&#8230;</p>
<p>Luego también como hacen muchos IDE&#8217;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:</p>
<p><a href="http://blog.foxandxss.net/cosasblog/resharper/3.JPG"><img alt="" src="http://blog.foxandxss.net/cosasblog/resharper/3.JPG" class="alignnone" width="493" height="226" /></a></p>
<p>Borrar el parámetro, crear una sobrecarga sin parámetro, ignorar el mensaje&#8230;</p>
<p>Todo esto y todavía no hemos escrito nada jeje.</p>
<p>Ahora imaginad que escribo algún atributo privado</p>
<p><a href="http://blog.foxandxss.net/cosasblog/resharper/4.JPG"><img alt="" src="http://blog.foxandxss.net/cosasblog/resharper/4.JPG" class="alignnone" width="266" height="142" /></a></p>
<p>¿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: &#8220;_mensaje&#8221;.</p>
<p>Ahora vamos a crear una propiedad autoimplementada y la usamos en nuestro main:</p>
<p><a href="http://blog.foxandxss.net/cosasblog/resharper/5.JPG"><img alt="" src="http://blog.foxandxss.net/cosasblog/resharper/5.JPG" class="alignnone" width="348" height="163" /></a></p>
<p>Nada extraño, pero si nos fijamos en el <i>get</i> 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.</p>
<p>Vamos a crear una clase que nos sirva para más ejemplos: (La pongo en imagen para ver otro aviso de ReSharper)</p>
<p><a href="http://blog.foxandxss.net/cosasblog/resharper/6.JPG"><img alt="" src="http://blog.foxandxss.net/cosasblog/resharper/6.JPG" class="alignnone" width="331" height="189" /></a><br />
Nada nuevo aquí, pero oh, ReSharper a marcado el <i>this</i>&#8230; Nos dice que el this aquí es redundante.</p>
<p>Bueno, de vuelta al Main, vamos a crear una lista de Libros:</p>
<p><a href="http://blog.foxandxss.net/cosasblog/resharper/7.JPG"><img alt="" src="http://blog.foxandxss.net/cosasblog/resharper/7.JPG" class="alignnone" width="439" height="133" /></a></p>
<p>Uh, ReSharper se ha cebado con la creacion de la lista&#8230;</p>
<p>¿Por qué marca el List
<libro>? Quizá esto sea algo más controvertido, pero ahora se está poniendo más de moda entre los desarrolladores a cambiar el modo en el que inicialian los objetos.</p>
<p>En este caso quedaría así:</p>
<pre class="brush: csharp;">
var libros = new List&lt;Libro&gt;();
</pre>
<p>No es que nos estemos volviendo dinámicos estilo Python, simplemente consideran que no es necesario ver dos veces List
<libro> que con una va bien y el resto es solo redundancia. Siempre y cuando dicho objeto sea local a un método y no como atributo de una clase ni nada. Al ser algo temporal pues piensan que no hace falta poner que tipo de variable es puesto que se puede deducir en la asignación.</p>
<p>¿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.</p>
<p>Finalmente todo quedaría así:</p>
<p><a href="http://blog.foxandxss.net/cosasblog/resharper/8.JPG"><img alt="" src="http://blog.foxandxss.net/cosasblog/resharper/8.JPG" class="alignnone" width="464" height="130" /></a></p>
<p>¿Mola eh?</p>
<p>Ahora imaginad que quereis cambiar los temas de &#8220;Prog&#8221; a &#8220;Programación&#8221;, podéis hacer algo en plan:</p>
<p><a href="http://blog.foxandxss.net/cosasblog/resharper/9.JPG"><img alt="" src="http://blog.foxandxss.net/cosasblog/resharper/9.JPG" class="alignnone" width="282" height="93" /></a></p>
<p>Nada mal, pero&#8230; ¿Qué sale debajo del foreach? ¿Dice que parte del foreach puede convertirse a algo LINQ? ¿Y que lo hará por nosotros? Pos fale.</p>
<p><a href="http://blog.foxandxss.net/cosasblog/resharper/10.JPG"><img alt="" src="http://blog.foxandxss.net/cosasblog/resharper/10.JPG" class="alignnone" width="474" height="79" /></a></p>
<p>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.</p>
<p>Vamos a hacer la lista de libros más grande, con más temas:</p>
<pre class="brush: csharp;">
var libros = new List&lt;Libro&gt;
             {
                 new Libro(&quot;Programacion&quot;, &quot;C# In Depth&quot;),
                 new Libro(&quot;Cocina&quot;, &quot;Cocina para novatos&quot;),
                 new Libro(&quot;Programacion&quot;, &quot;Linq In Action&quot;),
                 new Libro(&quot;Redes&quot;, &quot;Cisco CCNA&quot;),
                 new Libro(&quot;Bases de datos&quot;, &quot;SQL Server 2008&quot;),
                 new Libro(&quot;Cocina&quot;, &quot;Como cocinar pescado&quot;)
              };
</pre>
<p>Ahora imaginad que queremos crear una segunda lista de libros que solo contenga los de informática:<br />
<a href="http://blog.foxandxss.net/cosasblog/11.JPG"><img alt="" src="http://blog.foxandxss.net/cosasblog/resharper/11.JPG" class="alignnone" width="514" height="212" /></a></p>
<p>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).</p>
<p>En este caso nos dice que todo el bucle puede convertirse en algo LINQ:</p>
<pre class="brush: csharp;">
var librosInformatica = (from tema in temas from libro in libros where libro.Tema == tema select libro).ToList();
</pre>
<p>Aunque a veces puede salir con un:</p>
<pre class="brush: csharp;">
var librosInformatica = temas.SelectMany(tema =&gt; libros.Where(libro =&gt; libro.Tema == tema)).ToList();
</pre>
<p>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 <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Y bueno, esto es solo la punta del iceberg de lo que ReSharper nos ofrece&#8230;</p>
<p>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&#8230; Y luego ya lo tipico, mover código a métodos, cambiar nombre&#8230; Vamos, todo lo que hay para refactorizar código.</p>
<p>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.</p>
<p>¿Lo malo? Que la licencia es de pago. Tienes un trial de 30 días también. Merece la pena conseguirlo <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Os dejo un enlace a la página oficial y otro a su lista de features:</p>
<p><a href="http://www.jetbrains.com/resharper">http://www.jetbrains.com/resharper</a>/<br />
<a href="http://www.jetbrains.com/resharper/features/index.html">http://www.jetbrains.com/resharper/features/index.html</a></p>
<p>Nada más, un saludo y si os gusta, comentad <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.foxandxss.net/analizando-resharper/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

