Menu
Coddy logo textTech

Conceptos básicos de Closures

Parte de la sección Lógica y Flujo del Journey de Swift de Coddy. Lección 38 de 56.

Un closure es un bloque de código autónomo que puedes pasar y llamar más tarde. La sintaxis completa especifica los tipos de parámetros y de retorno:

let double = { (n: Int) -> Int in
    return n * 2
}
print(double(5))                  // 10

Swift puede inferir los tipos cuando el contexto es claro, por lo que rara vez se escribe la forma larga. Dentro de map, filter, etc., la abreviatura más corta es la norma:

let nums = [1, 2, 3, 4]
let doubled = nums.map { n in n * 2 }
let alsoDoubled = nums.map { $0 * 2 }    // el más corto, $0 es el primer argumento

Los cierres son valores: puedes almacenarlos en variables, devolverlos desde funciones y pasarlos como argumentos. Esa es precisamente la razón por la que funciona map.

challenge icon

Desafío

Fácil

Lee dos líneas de entrada:

  1. Un entero x
  2. Una lista de enteros separados por comas

Define tres cierres, cada uno (Int) -> Int:

  • addX suma x a su argumento
  • square devuelve el argumento elevado al cuadrado
  • negate devuelve el argumento negado

Aplica cada cierre a cada elemento de la lista usando map. Imprime tres líneas, una por cierre, con los resultados unidos por ,:

addX: ...
square: ...
negate: ...

Para la entrada 10 en la línea 1 y 1,2,3 en la línea 2, la salida es:

addX: 11,12,13
square: 1,4,9
negate: -1,-2,-3

Pruébalo tú mismo

let x = Int(readLine()!)!
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO: definir tres clausuras (Int) -> Int y mapear nums a través de cada una
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Playground de Swift