Refactorizar con IA sin cambiar lo que hace el código

Refactorizar es mejorar cómo está escrito el código sin cambiar lo que hace. La IA lo hace rápido, pero a menudo cambia más de lo que le pides. Aprende a fijar el comportamiento con console.assert, pedir un cambio cada vez y comprobar que todo sigue igual.

Refactorizar es cambiar la forma del código (nombres, duplicación, funciones) sin cambiar lo que hace.

Antes de tocar nada, fija el comportamiento: unas pocas comprobaciones con console.assert que digan qué salida esperas para cada entrada.

Pide a la IA un cambio cada vez y con nombre («extrae una función», «elimina la duplicación»), y prohíbele cambiar resultados o nombres que se usan desde fuera.

Después de cada cambio, vuelve a ejecutar las comprobaciones y revisa el diff. Si algo cambia, averigua por qué antes de seguir.

  • Cambiar cómo está escrito el código sin cambiar lo que hace.
  • Refactorizar es reorganizar el código para que sea más fácil de leer y de cambiar: quitar duplicación, dar nombres claros, partir una función enorme en varias pequeñas. Lo que no cambia es el comportamiento: con las mismas entradas, las mismas salidas.
  • Las IA proponen refactorizaciones con facilidad, pero tienden a «mejorar» de paso otras cosas: cambian un redondeo, el orden de una lista, el valor por defecto de un parámetro o cómo se trata una lista vacía. Cada una de esas mejoras es un cambio de comportamiento escondido dentro de un cambio de forma.
  • Unas pocas comprobaciones con console.assert.
  • console.assert(condición, mensaje) no hace nada si la condición se cumple y muestra el mensaje en la consola si no. Escribe tres o cuatro con entradas y salidas que conoces: un caso normal, uno raro (una lista vacía, un cero) y uno en el límite.

Qué es refactorizar

Cambiar cómo está escrito el código sin cambiar lo que hace.

Refactorizar es reorganizar el código para que sea más fácil de leer y de cambiar: quitar duplicación, dar nombres claros, partir una función enorme en varias pequeñas. Lo que no cambia es el comportamiento: con las mismas entradas, las mismas salidas.

Las IA proponen refactorizaciones con facilidad, pero tienden a «mejorar» de paso otras cosas: cambian un redondeo, el orden de una lista, el valor por defecto de un parámetro o cómo se trata una lista vacía. Cada una de esas mejoras es un cambio de comportamiento escondido dentro de un cambio de forma.

Antes de tocar nada: fija el comportamiento

Unas pocas comprobaciones con console.assert.

console.assert(condición, mensaje) no hace nada si la condición se cumple y muestra el mensaje en la consola si no. Escribe tres o cuatro con entradas y salidas que conoces: un caso normal, uno raro (una lista vacía, un cero) y uno en el límite.

Ejecútalas antes del cambio: tienen que pasar todas en silencio. Si alguna falla ya antes, no es un problema de la refactorización: has encontrado un fallo, y se arregla por separado.

En proyectos más grandes estas comprobaciones se convierten en tests con herramientas como Vitest; la idea es la misma.

Pide un cambio cada vez, con nombre

Pide «extrae una función», no «mejóralo».

Después de cada cambio: compara

Ejecuta las comprobaciones y revisa el diff.

Vuelve a ejecutar las comprobaciones. Si alguna avisa, la refactorización ha cambiado el comportamiento: descarta el cambio o pide a la IA que explique qué ha hecho distinto.

Revisa también el diff (lo viste en la lección del agente): en una refactorización buena, las líneas cambian de sitio o de nombre, pero no aparecen números nuevos, condiciones distintas ni casos que antes no existían. Y haz un commit por cada cambio que funcione: si el siguiente sale mal, vuelves a ese punto.

Señales de un cambio de comportamiento escondido

Si ves esto en el diff de una refactorización, pregunta.

  • Números distintos: un redondeo, un límite, un valor por defecto.
  • Condiciones nuevas o que desaparecen (if (!lista.length) return … donde antes no había nada).
  • Cambios de orden: un sort añadido, un reverse quitado.
  • Nombres de funciones, clases o ids que se usan desde el HTML u otros ficheros.
  • Dependencias nuevas «para simplificar».
IA para programar
09

Refactorizar con IA sin cambiar lo que hace el código

Refactorizar es mejorar cómo está escrito el código sin cambiar lo que hace. La IA lo hace rápido, pero a menudo cambia más de lo que le pides. Aprende a fijar el comportamiento con console.assert, pedir un cambio cada vez y comprobar que todo sigue igual.

Código del tema: console.assert · extraer función

📘 Teoría

Qué es refactorizar

Cambiar cómo está escrito el código sin cambiar lo que hace.

Refactorizar es reorganizar el código para que sea más fácil de leer y de cambiar: quitar duplicación, dar nombres claros, partir una función enorme en varias pequeñas. Lo que no cambia es el comportamiento: con las mismas entradas, las mismas salidas.

Las IA proponen refactorizaciones con facilidad, pero tienden a «mejorar» de paso otras cosas: cambian un redondeo, el orden de una lista, el valor por defecto de un parámetro o cómo se trata una lista vacía. Cada una de esas mejoras es un cambio de comportamiento escondido dentro de un cambio de forma.

Antes de tocar nada: fija el comportamiento

Unas pocas comprobaciones con console.assert.

console.assert(condición, mensaje) no hace nada si la condición se cumple y muestra el mensaje en la consola si no. Escribe tres o cuatro con entradas y salidas que conoces: un caso normal, uno raro (una lista vacía, un cero) y uno en el límite.

Ejecútalas antes del cambio: tienen que pasar todas en silencio. Si alguna falla ya antes, no es un problema de la refactorización: has encontrado un fallo, y se arregla por separado.

En proyectos más grandes estas comprobaciones se convierten en tests con herramientas como Vitest; la idea es la misma.

Pide un cambio cada vez, con nombre

Pide «extrae una función», no «mejóralo».

1

Extraer función

Un trozo repetido o largo pasa a ser una función con un nombre que dice lo que hace.

2

Renombrar

x, data2 o handle pasan a llamarse totalPedido, proyectosFiltrados, alPulsarMenu.

3

Eliminar duplicación

Dos bloques casi iguales se unifican con un parámetro.

4

Simplificar condiciones

Un if anidado se convierte en una salida temprana (return) más fácil de leer.

Después de cada cambio: compara

Ejecuta las comprobaciones y revisa el diff.

Vuelve a ejecutar las comprobaciones. Si alguna avisa, la refactorización ha cambiado el comportamiento: descarta el cambio o pide a la IA que explique qué ha hecho distinto.

Revisa también el diff (lo viste en la lección del agente): en una refactorización buena, las líneas cambian de sitio o de nombre, pero no aparecen números nuevos, condiciones distintas ni casos que antes no existían. Y haz un commit por cada cambio que funcione: si el siguiente sale mal, vuelves a ese punto.

Señales de un cambio de comportamiento escondido

Si ves esto en el diff de una refactorización, pregunta.

  • Números distintos: un redondeo, un límite, un valor por defecto.
  • Condiciones nuevas o que desaparecen (if (!lista.length) return … donde antes no había nada).
  • Cambios de orden: un sort añadido, un reverse quitado.
  • Nombres de funciones, clases o ids que se usan desde el HTML u otros ficheros.
  • Dependencias nuevas «para simplificar».

🧪 Aprende probando

Ejemplo Ejemplo guiado: una comprobación que avisa La segunda comprobación falla a propósito: ejecuta y busca el aviso en la consola. Después corrige el valor esperado.
⌄

🏁 Retos

Reto Reto 1: elimina la duplicación sin cambiar los totales Los dos bucles hacen lo mismo. Extrae una función sumar(lista) y úsala para los dos carritos.
⌄
Reto Reto 2: el encargo de refactorización Escribe lo que le pedirías a la IA para que refactorice tu función de filtrado sin cambiar lo que hace.
⌄

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros. culTest

La hice en febrero de 2026 para facilitar el aprendizaje de mis alumnos. La idea es aprender desarrollo web practicando y que el proyecto siga creciendo con nuevos temas, tests y retos.

Está inspirada en MDN, W3Schools, CodePen, Manz y muchos otros sitios de documentación sobre desarrollo web. Quería combinar teoría útil, ejemplos ejecutables, retos y el sistema de tests que ya tenía en culTest. culTest

Si te gustó, si no te gustó o si quieres escribirme, puedes hacerlo en cristianeslava@gmail.com