Zig Academy · Lección

errdefer para limpiar tras un fallo

Deshaga el trabajo solo cuando algo falle.

Lección 3 de 413 pasos

errdefer para limpiar tras un fallo es una lección gratuita de Zig Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Zig Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Zig Academy incluye 4 lecciones en total.

Limpieza solo en caso de fallo

A veces debe deshacer el trabajo cuando una operación falla, pero conservarlo si tiene éxito. Ese caso concreto es precisamente para lo que sirve errdefer.

Conozca errdefer

Un errdefer programa código para que se ejecute al salir del ámbito, pero solo cuando la función devuelve un error a partir de ese punto.

errdefer allocator.free(buffer);

defer siempre, errdefer con errores

Un defer se ejecuta independientemente de cómo termine el ámbito. Un errdefer solo se ejecuta en la ruta de error, por lo que se omite por completo si todo sale bien.

Liberar un resultado a medio construir

Asigne memoria y, a continuación, use errdefer para liberar el recurso. Si falla un paso posterior, se libera el búfer; si todos los pasos tienen éxito, lo conserva y lo devuelve.

const buf = try allocator.alloc(u8, n);
errdefer allocator.free(buf);
try fill(buf);

El orden refleja la asignación

Coloque cada errdefer justo después de la adquisición correspondiente. En caso de fallo, se ejecutan en orden inverso y deshacen los recursos de forma segura.

const a = try open();
errdefer a.close();
const b = try open();
errdefer b.close();

El éxito conserva su trabajo

Cuando la función devuelve un valor en lugar de un error, se omiten todos los errdefer. El llamador recibe el resultado completamente construido.

return buf;

Importa el punto de activación

Un errdefer solo protege frente a los errores que ocurren después de registrarlo. Los errores anteriores a esa línea no pueden activarlo, así que colóquelo pronto.

Capturar el error

Puede capturar el error en un errdefer para inspeccionarlo durante la limpieza, por ejemplo, para registrar qué fallo activó la reversión.

errdefer |e| std.debug.print("failed: {}\n", .{e});

Constructores sin fugas

Las funciones que asignan recursos y después pueden fallar usan errdefer para evitar fugas. El trabajo parcial se deshace automáticamente ante cualquier error.

Combinar con try

Cada try puede salir antes de tiempo si se produce un error. Con un errdefer registrado, esa salida anticipada sigue activando la limpieza antes de deshacer la pila.

const x = try step();
errdefer rollback(x);
_ = try next(x);

La herramienta adecuada para la reversión

Use errdefer cuando la limpieza solo deba realizarse si algo sale mal. Convierte la gestión de recursos en la ruta de error en una única línea clara.

Comprobación rápida

Asigna un búfer y, posteriormente, un paso puede fallar. Quiere liberarlo solo en caso de fallo. ¿Qué debe usar?

Recapitulación

Ha usado errdefer para deshacer el trabajo parcial en la ruta de error, lo ha colocado justo después de cada adquisición y ha conservado intactos los resultados correctos. ✅

Gratis para empezar

Aprende Zig con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «errdefer para limpiar tras un fallo» es gratis?

Sí — el texto completo de «errdefer para limpiar tras un fallo» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Zig Academy, actualiza a CoddyKit PRO. El curso de Zig Academy incluye 4 lecciones en total.

¿Qué aprenderé en «errdefer para limpiar tras un fallo»?

Deshaga el trabajo solo cuando algo falle. Practicas Zig Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Zig Academy?

No se requiere experiencia previa. Zig Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «errdefer para limpiar tras un fallo»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Zig Academy?

Sí. Cada lección de Zig Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Recuperarse con catch
  2. Usar switch con errores específicos
  3. errdefer para limpiar tras un fallo
  4. Envolver y volver a lanzar errores
← Volver a Zig Academy