Saltar al contenido

05 · Control de Flujo

defer

Programa limpieza para la salida del ámbito, en orden LIFO.

En esta página

defer programa un bloque para ejecutarse cuando el ámbito actual termina — sin importar por qué camino salga. Varios defer se ejecutan en orden LIFO (el último programado se ejecuta primero), lo que es perfecto para deshacer la configuración en orden inverso:

La limpieza ocurre al salir del ámbito, en orden inverso al de programación.

19-defer.zolo
Playground
// Feature: `defer` — cleanup on scope exit (LIFO)
// Syntax: `defer expr` or `defer { ... }`
// When to use: ensure resources are released
// (close file, drop lock, restore state) even if
// the function returns early or panics.
// Execution order: LIFO — the last `defer` declared
// runs first.

fn process_file() {
  print("opening file")
  defer print("closing file")  // runs last
  defer print("flushing")  // runs second-to-last

  print("processing")
  print("done")
}

process_file()

// expected:
// opening file
// processing
// done
// flushing
// closing file

// Deferred cleanup combined with early return.
// SKIP: `defer` combined with an explicit `return <value>` from a
// typed function currently fails to lower (the runtime needs to wrap
// the body in `pcall` for defer-on-panic; this conflicts with early
// return). The pattern below uses a void function instead.
fn safe_op(ok: bool) {
  print("start")
  defer print("cleanup guaranteed")

  if !ok {
    print("error -- returning early")
    return
  }
  print("success")
}

print("--- ok call ---")
safe_op(true)
print("--- failed call ---")
safe_op(false)

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br