0Pricing
Swift Academy · Lección

Orden de varios bloques defer

Comprenda el orden de ejecución inverso de defer.

Orden de varios bloques defer es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 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 Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

Varios defer

Un ámbito puede contener varios bloques defer. Todos se ejecutan al salir del ámbito.

func demo() {
    defer { print("A") }
    defer { print("B") }
    print("body")
}
demo()

Orden inverso (LIFO)

Los bloques diferidos se ejecutan en el orden inverso al de su declaración: el último declarado se ejecuta primero.

func order() {
    defer { print("1") }
    defer { print("2") }
    defer { print("3") }
    print("start")
}
order()

Por qué LIFO

El orden LIFO refleja cómo se anidan la configuración y la limpieza: la configuración más reciente se deshace primero.

func resources() {
    print("open A")
    defer { print("close A") }
    print("open B")
    defer { print("close B") }
    print("use both")
}
resources()

Modelo mental de pila

Piense en los defer como una pila: cada uno añade una tarea, y las tareas se extraen en orden inverso cuando termina el ámbito.

func stack() {
    defer { print("pop first-declared last") }
    defer { print("pop last-declared first") }
    print("push done")
}
stack()

Defer y el estado local

Cada defer captura las variables circundantes y ve sus valores finales cuando se ejecuta.

func state() {
    var x = 1
    defer { print("x is", x) }
    x = 42
}
state()

Defer en un bucle

Dentro de un bucle, cada iteración registra y ejecuta sus propios defer en orden LIFO al final de esa iteración.

for i in 1...2 {
    defer { print("late", i) }
    defer { print("early", i) }
    print("body", i)
}

Ámbitos anidados

Los defer se ejecutan cuando termina su propio ámbito, por lo que el defer de un bloque interno se ejecuta antes que el de un bloque externo.

func nested() {
    defer { print("outer defer") }
    do {
        defer { print("inner defer") }
        print("inner body")
    }
    print("outer body")
}
nested()

Limpieza predecible

El orden LIFO hace que los pares correspondientes de apertura y cierre se cierren naturalmente en la secuencia correcta.

func files() {
    print("open log")
    defer { print("flush log") }
    print("open db")
    defer { print("disconnect db") }
    print("transaction")
}
files()

Lectura del orden

Para predecir la salida, lea los defer de abajo arriba: el último defer del ámbito imprime primero.

func quiz() {
    defer { print("one") }
    defer { print("two") }
    print("body runs first")
}
quiz()

Combinación con return

Todos los defer registrados se ejecutan igualmente en orden LIFO aunque la función devuelva el control antes de tiempo.

func early(_ skip: Bool) {
    defer { print("cleanup 1") }
    defer { print("cleanup 2") }
    if skip { return }
    print("full body")
}
early(true)

Práctica recomendada

Declare cada limpieza justo después de su configuración y confíe en el orden LIFO para deshacerlas correctamente.

func pattern() {
    print("acquire 1")
    defer { print("release 1") }
    print("acquire 2")
    defer { print("release 2") }
    print("work")
}
pattern()

Comprobación rápida

Pruebe el orden de ejecución de defer.

Resumen

Varios bloques defer se ejecutan en orden inverso (LIFO) al salir del ámbito: el último declarado se ejecuta primero. Esto deshace naturalmente los pares anidados de configuración y limpieza en el orden correcto, incluso al devolver el control antes de tiempo.

func demo() {
    defer { print("1") }
    defer { print("2") }
    print("body")
}
demo()

Preguntas frecuentes

¿La lección «Orden de varios bloques defer» es gratis?

Sí — el texto completo de «Orden de varios bloques defer» 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 Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Orden de varios bloques defer»?

Comprenda el orden de ejecución inverso de defer. Practicas Swift 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 Swift Academy?

No se requiere experiencia previa. Swift 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 2 de 4.

¿Cuánto tiempo toma la lección «Orden de varios bloques defer»?

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 Swift Academy?

Sí. Cada lección de Swift 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. Cómo funciona defer
  2. Orden de varios bloques defer
  3. defer para liberar recursos
  4. defer con errores y retornos anticipados
← Volver a Swift Academy