¿Qué es un Autoclosure?
Libranner Santos
19 marzo, 20232min de lectura
@autoclosure
es un atributo que nos permite un closure para contener una expresión. Cuando esta expresión es contenida no se ejecuta hasta que sea necesario, lo que puede ser muy útil para manejo eficiente de memoria. También podemos ver el uso de @autoclosure
cuando queremos pasar un closure como parámetro, pero no queremos incluir la notación de closure (usar llaves para escribir un bloque de código), porque en algunos casos queremos pasar un valor directamente.
Veamos un ejemplo:
func evaluate(_ action: @autoclosure () -> Void, value: Int) {if value > 0 {action()}}// Llamamos la funciónevaluate(print("Es mayor de cero"), value: 1)
Cuando llamamos evaluate(_:value:)
en el primer parámetro estamos pasando un bloque de código. Sin embargo, en vez de pasarlo entre llaves, por ejemplo, usando { print("Es mayor de cero") }
, lo pasamos directamente. @autoclosure
se encarga de contener nuestro bloque de código, por lo que el uso de llaves no es necesario.
Notas
- El uso masivo de
@autoclosure
puede hacer que tu código sea difícil de entender, así que deberías usarlo tomando en cuenta si aporta más claridad. - Usa
@autoclosure
cuando tengas bloques de código que quieras ejecutar de manera lazy. Como mencionamos anteriormente, el bloque contenido no se ejecutará hasta que sea necesario.