Hoy · Hoja de ruta
- 1. Aprende: Qué señales indican que un código se puede mejorar sin cambiar lo que hace.
- 2. Haz: Refactoriza un fichero que funciona pero está mal escrito.
- 3. Comprueba: El comportamiento no ha cambiado, y la lectura sí.
Antes de empezar · 5 minutos, sin apuntes
- ¿Qué es lo primero que miras al abrir código de otra persona?
- ¿Qué hace que un fragmento sea difícil de leer?
- ¿Cómo sabes que una mejora no ha roto nada?
Las señales
| Señal | Qué suele significar | Qué se hace |
|---|---|---|
| Una función de 60 líneas | Hace varias cosas | Extraer funciones |
| Nombres de una letra | Nadie sabe qué contienen | Renombrar |
| El mismo bloque tres veces | Falta una función | Extraer y parametrizar |
Números sueltos (* 1.21) |
Falta una constante | Nombrarlo |
| Anidamiento de cuatro niveles | Faltan salidas tempranas | Invertir condiciones |
| Comentarios que explican qué hace | El código no se explica solo | Reescribir el código |
Refactorizar
Cambiar cómo está escrito un programa sin cambiar lo que hace. Si el comportamiento cambia, la operación deja de ser una refactorización y pasa a ser una modificación, que debe probarse como tal.
Salidas tempranas
// Antes: cuatro niveles de anidamiento
function precioFinal(producto) {
if (producto) {
if (producto.precio > 0) {
if (producto.descuento) {
return producto.precio * (1 - producto.descuento);
} else {
return producto.precio;
}
}
}
}
// Después: los casos raros se despachan al principio
function precioFinal(producto) {
if (!producto) return 0;
if (producto.precio <= 0) return 0;
if (!producto.descuento) return producto.precio;
return producto.precio * (1 - producto.descuento);
}
La segunda versión se lee de arriba abajo, y cada línea responde a un caso.
Comprobar que no has roto nada
Antes de tocar, escribe en un fichero las respuestas actuales del programa para media docena de entradas. Refactoriza. Vuelve a ejecutar. Si algo cambió, la refactorización introdujo un error.
Eso es, en versión manual, lo que en el módulo de servidor harán los tests automáticos.
Tarea 17 · El fichero heredado
Recibirás un módulo de unas cien líneas que funciona pero está mal escrito:
- Ejecútalo y anota su comportamiento con seis entradas.
- Localiza cinco señales de la tabla.
- Refactoriza en pasos pequeños, comprobando después de cada uno.
- Escribe un comentario por cada cambio explicando qué señal atacaba.
- Demuestra que el comportamiento es idéntico.
Objetivo mínimoCinco mejoras aplicadas y comportamiento idéntico demostrado.
Si lo tienesReduce el anidamiento máximo a dos niveles en todo el fichero.
RetoEncuentra el fallo lógico que el fichero esconde, y sepáralo de la refactorización.
Checkpoint · fin de la sesión 17
- Reconoces las señales de un código difícil de mantener.
- Refactorizas en pasos pequeños y comprobables.
- Usas salidas tempranas en lugar de anidar.
- Distingues refactorizar de modificar.