0

Visual Studio (Productividad) #4: Refactoring

En esta última entrega vamos a hablar de Refactoring. Muchos de nosotros seguramente utilizamos ReSharper para hacer una refactorización de código efectivo. Desde la versión 2022 de Visual Studio las funcionalidades de refactorizar han sido mejoradas en gran medida haciendo que otras herramientas sean innecesarias. Veamos que tenemos.

Cambiar nombres de los identificadores

Podemos cambiar nombres de objetos o identificadores como: variables, campos, clases, etc. Para hacerlo seleccionaremos el identificador y presionaremos Ctrl + R + R (R 2 veces). Al comenzar a escribir el nuevo nombre del identificador, veremos como se va cambiando en los lugares donde se encuentra el identificador.

Hay que tener en cuenta que este cambio, tal vez, no solamente afecte al archivo actual. Es posible que necesitamos renombrar referencias, o cambiar nombre de archivos. Antes de realizar el cambio final, es posible ver en la ventana de vista previa los cambios que se realizarán. En la ventana contextual debemos seleccionar “Preview Changes” y presionar Apply.

Extraer métodos

Podemos activar las Acciones Rápidas y Refactorizaciones por medio de la tecla Ctrl + . Creo que es uno de los atajos que siempre debemos tener presentes, si no lo conocías hasta ahora, pega un post-it en el monitor con este comando. 

Si queremos extraer un fragmento de código a un método, debemos hacer los siguientes pasos: primero seleccionamos las líneas de código deseadas, luego presionamos Ctrl + ., por último, seleccionamos “Extract method”. Una vez seleccionado se quedará posicionado en el lugar, se verá color verde, para que escribamos el nombre.

Limpiar y ordenar 

Muchas veces cuando hacemos refactoring, los using quedan en desuso o agregamos nuevos rápidamente sin tener un orden predeterminado. Podemos limpiar y ordenar automáticamente los using desde el menu Edit > Intellisense > Remove and Sort Usings.

No posee un tecla rápida, pero podemos configurar desde el menú Tools > Options > Keyboards.

Otro camino, tal vez más rápido, es posicionarnos sobre los using y presionar la lámpara amarilla que aparece a la izquierda. Seleccionaremos la opción Remove Unnecessary Usings. Lo más interesante de esta ventana, es que abajos a la derecha podemos ver varias opciones, no solamente podemos limpiar el documento, también podemos hacer en un proyecto o en la solución completa.

Using faltantes al copiar y pegar

Cuando copiamos y pegamos fragmentos de código podemos tener errores por la falta de los using necesarios para el este. Para solucionarlo, luego de pegar el fragmento de código presionamos Ctrl + . y seleccionamos Add missing usings.

Crear propiedades desde el constructor

Supongamos que tenemos un constructor el cual recibe algunas variables. Fácilmente, podemos convertir todas estas variables en propiedades y serán autoasignadas dentro del constructor. Esta funcionalidad es muy útil cuando trabajamos con inyección de dependencia. Tal vez no necesitemos propiedades, sino, la declaración de una variable privada y su asignación, también podemos hacerlo.

Para utilizar la funcionalidad debemos pararnos sobre la declaración, presionamos Ctrl + ., y la opción “Create and initialize property”. Si queremos que sea un campo seleccionamos “Create and initialize field”.

Crear constructor desde propiedades

Similar a la anterior, podemos generar un constructor a partir de un conjunto de propiedades. Seleccionamos el fragmento con las propiedades, presionamos Ctrl + ., y seleccionamos “Generate Constructor”.

Convertir un expresión foreach en Linq

Muchas veces cuando tenemos un bucle, dentro de otro y tenemos un condicional dentro de este último, es posible convertirlo en una expresión simple de LINQ. Tal vez no se pueda en algunos casos, pero en su gran mayoría es posible. Si se cumple el patrón que vemos en la imagen lo podremos hacer.

Seleccionamos todo el bloque de foreach, presionamos Ctrl + . y seleccionamos “Convert to LINQ”.

Extraer Clase a una Interface

Esta opción es para los más perezosos, quienes prefieren escribir primero la clase y luego la interface. Debemos posicionarnos sobre la clase, presionamos Ctrl + .  y seleccionamos la opción “Extract Interface”. Nos mostrará una ventana de diálogo con las opciones con la cual creará la interface. Presionamos Ok y automáticamente agrega la herencia a la clase de la cual extrajimos la interface y creará el archivo correspondiente.

Mover de NameSpaces

Cuando creamos un archivo nuevo de codigo en C#, Visual Studio, automáticamente nos completa el NameSpaces. Imaginemos que creamos una nueva clase, la completamos, y más tarde, nos damos cuenta que la creamos en otra carpeta y tiene otro NameSpaces. Podemos moverlo, pero queda con el viejo NameSpaces. Si nos posicionamos sobre el objeto y presionamos Ctrl + . nos dará la opción “Move to Namespace”. Esta opción no abrirá una ventana de diálogo para cambiar el NameSpaces, inclusive tiene una lista de la cual podemos elegir el correcto.

Agregar parametro a un método existente

Supongamos que estamos invocando un método y nos damos cuenta que le falta un parámetro o una sobrecarga. Podemos invocar el método y escribir el parámetro que le falta, luego seleccionamos el parámetro, presionamos Ctrl + . y elegimos la opción “Add parameter to”.

Simplificar la interpolación de string

El camino correcto para hacer interpolaciones siempre fue String.Format. Con el tiempo se agregaron mejoras en C# para realizarlo de una manera más simple por medio de $ y las {}. Es posible transformar la primera forma a la segunda forma. Seleccionamos el String.Format, presionamos Ctrl + ., y seleccionamos la opción “Convert to interpolated string”.

Conclusiones

Con el avance del tiempo, con cada nueva actualización, Visual Studio se va convirtiendo en una herramienta cada vez más poderosa. Desde las versiones 2022 ha mejorado en sus funcionalidades de refactoring y vienen muchas más en camino. Les agradezco que me hayan acompañado en esta serie de post. No te olvides seguirme en Twitter FernandoSonego. No vemos en los próximos.

Fernando Sonego

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *