Menu
Coddy logo textTech

Fundamentos de Closures

Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 38 de 56.

Uma closure é um bloco de código autônomo que você pode passar e chamar mais tarde. A sintaxe completa detalha os tipos de parâmetros e de retorno:

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

O Swift pode inferir os tipos quando o contexto está claro, então você raramente escreve a forma longa. Dentro de map, filter, etc., a forma abreviada mais curta é a norma:

let nums = [1, 2, 3, 4]
let doubled = nums.map { n in n * 2 }
let alsoDoubled = nums.map { $0 * 2 }    // shortest, $0 is the first arg

Closures são valores, você pode armazená-los em variáveis, retorná-los de funções e passá-los como argumentos. Essa é a razão pela qual o map funciona.

challenge icon

Desafio

Fácil

Leia duas linhas de entrada:

  1. Um número inteiro x
  2. Uma lista de inteiros separados por vírgula

Defina três closures, cada uma do tipo (Int) -> Int:

  • addX adiciona x ao seu argumento
  • square retorna o argumento ao quadrado
  • negate retorna o argumento negado

Aplique cada closure a cada elemento da lista usando map. Imprima três linhas, uma por closure, com os resultados unidos por ,:

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

Para a entrada 10 na linha 1 e 1,2,3 na linha 2, a saída é:

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

Folha de consulta

Uma closure é um bloco de código autônomo que pode ser armazenado e passado adiante. Sintaxe completa:

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

Closures podem ser armazenadas em variáveis e passadas como argumentos (ex: para map). O Swift infere tipos no contexto, permitindo formas abreviadas:

let nums = [1, 2, 3, 4]
let doubled = nums.map { n in n * 2 }
let alsoDoubled = nums.map { $0 * 2 }  // $0 é o primeiro argumento

Experimente você mesmo

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

// TODO: definir três closures (Int) -> Int e mapear nums através de cada uma
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo