Zig Academy · Lección

defer frente a errdefer en la práctica

Elija entre ejecutar siempre o hacerlo solo en caso de error.

Lección 3 de 413 pasos

defer frente a errdefer en la práctica 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.

Dos palabras clave de limpieza

Zig le ofrece dos herramientas de programación: defer siempre se ejecuta, mientras que errdefer solo se ejecuta cuando el ámbito termina con un error.

defer significa siempre

Use defer cuando la limpieza deba realizarse sin importar lo que ocurra, como al cerrar un archivo que abrió para toda la función.

const f = try open();
defer f.close();

errdefer significa en caso de error

Un errdefer solo se ejecuta si el ámbito termina debido a un error. Si la devolución es correcta, se omite silenciosamente.

const buf = try alloc();
errdefer free(buf);

Por qué se omite si todo va bien

A veces construye un valor para devolverlo. Si todo va bien, el llamador pasa a ser su propietario, así que no debe liberarlo; errdefer respeta esto.

Objetos construidos a medias

errdefer resulta especialmente útil en los constructores. Si falla un paso posterior, deshace las asignaciones anteriores para que nunca se filtre un objeto construido a medias.

const a = try alloc();
errdefer free(a);
const b = try alloc();

El éxito transfiere la propiedad

Cuando todos los pasos tienen éxito, la función devuelve el valor y los errdefer no se ejecutan. La propiedad se transfiere limpiamente al llamador.

return MyType{ .a = a, .b = b };

Se combinan muy bien

Puede combinar ambos. Un defer gestiona la memoria temporal de trabajo, mientras que un errdefer protege el resultado que planea devolver.

Ambos respetan el orden inverso

Al igual que defer, varios errdefer se desenrollan en orden inverso. En caso de error, Zig ejecuta juntos los defer y errdefer correspondientes, empezando por el más reciente.

La ubicación importa

Coloque cada errdefer justo después del paso que protege. Solo cubre los errores que ocurren después de alcanzar su propia línea.

Una regla sencilla

Hágase una pregunta: ¿debe ejecutarse esta limpieza también si todo va bien? Sí significa defer; solo en caso de error significa errdefer.

Sin fugas por diseño

Juntas, estas palabras clave le permiten escribir funciones sin fugas en todos los caminos, tanto si tienen éxito como si fallan, sin llevar un registro manual.

Comprobación rápida

¿Cuándo se ejecuta errdefer en comparación con defer?

Repaso

Use defer cuando la limpieza siempre deba ejecutarse, y errdefer cuando solo deba deshacer el trabajo en el camino de error. ✅

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 «defer frente a errdefer en la práctica» es gratis?

Sí — el texto completo de «defer frente a errdefer en la práctica» 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 «defer frente a errdefer en la práctica»?

Elija entre ejecutar siempre o hacerlo solo en caso de error. 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 «defer frente a errdefer en la práctica»?

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. Qué garantiza defer
  2. Orden de ejecución de varios defers
  3. defer frente a errdefer en la práctica
  4. Emparejar Open con Close
← Volver a Zig Academy