# Refactoring

> Reorganizar código para que sea más claro, sin cambiar lo que hace.

- Nivel: Intermedio
- Temas: Software
- URL: https://tidbit.legios.com.ar/es/refactoring/
- En inglés: [Refactoring](https://tidbit.legios.com.ar/refactoring/)

El **refactoring** (o refactorización) es cambiar la estructura interna del código sin cambiar su comportamiento. Desde afuera no se nota nada: mismas pantallas, mismos resultados, hasta los mismos bugs. Por dentro, el código queda más fácil de leer y de modificar. Movidas típicas son darle a una variable un nombre más claro, partir una función de 300 líneas en varias chicas con nombres que se entiendan, sacar código duplicado o mover una pieza a donde corresponde.

La idea la popularizó el libro Refactoring de Martin Fowler, publicado por primera vez en 1999, que catalogó decenas de estas transformaciones chicas. La regla clave es avanzar en **pasos chicos** y que el programa siga funcionando después de cada uno. Eso solo es seguro con buenos tests automatizados: los corrés después de cada paso y, si siguen pasando, sabés que no rompiste nada.

Los equipos refactorizan porque el código fácil de entender es barato de cambiar, y el software se cambia todo el tiempo. Es la forma principal de pagar la deuda técnica. Un hábito común es ordenar la zona en la que estás por trabajar antes de agregarle una funcionalidad nueva, algo que se resume como "dejá el camping más limpio de lo que lo encontraste". Lo que no es refactoring: reescribir todo de cero, o meter funcionalidades nuevas de paso.

## Una analogía

Como reorganizar una cocina: mismas ollas, mismas recetas, salen los mismos platos. Pero ahora las especias están etiquetadas y al lado de la hornalla, así que mañana cocinás más rápido y se te vuelcan menos cosas.

## Para quedarse

- Cambia cómo está organizado el código, nunca lo que hace.
- Se hace en pasos chicos, corriendo los tests después de cada uno.
- Hace que los cambios siguientes sean más rápidos y seguros; paga deuda técnica.
- Mezclar refactoring con funcionalidades nuevas en un mismo cambio complica revisar las dos cosas.

## Para seguir leyendo

- [Refactorización en Wikipedia](https://es.wikipedia.org/wiki/Refactorizaci%C3%B3n)
- [Refactoring (sitio de Martin Fowler, en inglés)](https://refactoring.com/)

## Términos relacionados

- [Bug](https://tidbit.legios.com.ar/es/bug/): Un error en un software que hace que se comporte distinto de lo que se buscaba.
- [Testing de software](https://tidbit.legios.com.ar/es/software-testing/): Comprobar que el software hace lo que debe, sobre todo con código que prueba código.
- [Deuda técnica](https://tidbit.legios.com.ar/es/technical-debt/): El costo futuro de los atajos que se toman hoy en el software.
