← Volver al blog

Cómo funciona Ctrl+Z: la pila de deshacer explicada para programadores

·2 min de lectura

En este artículo (4 apartados)
  1. La pila de deshacer
  2. El patrón Command
  3. Otra opción: guardar instantáneas
  4. ¿Y la IA?

Todos usamos Ctrl+Z decenas de veces al día, y de ahí viene el nombre del canal Control Z (Ctrl-Zeta). Pero ¿cómo sabe un programa qué tiene que deshacer? En este artículo vemos la idea que hay detrás y cómo programarla tú mismo.


Publicidad

La pila de deshacer

La mayoría de editores guardan cada cambio en una pila (estructura LIFO: el último en entrar es el primero en salir). Al pulsar Ctrl+Z se saca el último cambio de la pila de deshacer y se mete en una segunda pila, la de rehacer (Ctrl+Y o Ctrl+Mayús+Z, según el programa). Si haces un cambio nuevo después de deshacer, la pila de rehacer se vacía.

El patrón Command

Una forma clásica de implementarlo es el patrón de diseño Command: cada acción es un objeto con dos métodos, ejecutar() y deshacer().

class Historial {
  constructor() { this.deshacer = []; this.rehacer = []; }
  hacer(cmd) { cmd.ejecutar(); this.deshacer.push(cmd); this.rehacer = []; }
  undo() { const c = this.deshacer.pop(); if (c) { c.deshacer(); this.rehacer.push(c); } }
  redo() { const c = this.rehacer.pop(); if (c) { c.ejecutar(); this.deshacer.push(c); } }
}

Otra opción: guardar instantáneas

En lugar de guardar acciones, se puede guardar una copia del estado completo antes de cada cambio (patrón Memento). Es más sencillo pero gasta más memoria, por eso muchos programas limitan el número de pasos de deshacer.

¿Y la IA?

Los asistentes de programación con IA también necesitan un «Ctrl+Z»: editores como Cursor guardan puntos de control para volver atrás los cambios que propone el agente. La idea es la misma: no aplicar nada que no puedas revertir.

Publicidad

¿Quieres verlo en vídeo? Suscríbete a Control Z en YouTube.

← Volver al blog

Roger
×
¡Hola! Soy Roger, de Abduction Desarrollo Web. Te ayudo con automatizaciones (n8n, WhatsApp), WordPress y webapps. ¿Qué necesitás?
Roger