← JavaScript: el lenguaje

Sesión 17 · Semana 6

Refactorizar y leer código ajeno

Hoy · Hoja de ruta

  1. 1. Aprende: Qué señales indican que un código se puede mejorar sin cambiar lo que hace.
  2. 2. Haz: Refactoriza un fichero que funciona pero está mal escrito.
  3. 3. Comprueba: El comportamiento no ha cambiado, y la lectura sí.

Antes de empezar · 5 minutos, sin apuntes

  1. ¿Qué es lo primero que miras al abrir código de otra persona?
  2. ¿Qué hace que un fragmento sea difícil de leer?
  3. ¿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:

  1. Ejecútalo y anota su comportamiento con seis entradas.
  2. Localiza cinco señales de la tabla.
  3. Refactoriza en pasos pequeños, comprobando después de cada uno.
  4. Escribe un comentario por cada cambio explicando qué señal atacaba.
  5. 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.