Menu
Coddy logo textTech

Nozioni di base sulle closure

Fa parte della sezione Logica e flusso del percorso Swift di Coddy. Lezione 38 di 56.

Una closure è un blocco di codice autonomo che puoi passare e chiamare in seguito. La sintassi completa specifica i tipi dei parametri e del valore restituito:

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

Swift può dedurre i tipi quando il contesto è chiaro, quindi raramente scrivi la forma estesa. All'interno di map, filter ecc., la forma abbreviata è la norma:

let nums = [1, 2, 3, 4]
let doubled = nums.map { n in n * 2 }
let alsoDoubled = nums.map { $0 * 2 }    // la forma più breve, $0 è il primo argomento

Le closure sono valori: puoi memorizzarle in variabili, restituirle dalle funzioni e passarle come argomenti. È proprio per questo che map funziona.

challenge icon

Sfida

Facile

Leggi due righe di input:

  1. Un intero x
  2. Un elenco di interi separati da virgole

Definisci tre closure, ciascuna (Int) -> Int:

  • addX aggiunge x al suo argomento
  • square restituisce l'argomento elevato al quadrato
  • negate restituisce l'argomento negato

Applica ogni closure a ciascun elemento dell'elenco usando map. Stampa tre righe, una per closure, con i risultati uniti da ,:

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

Con 10 alla riga 1 e 1,2,3 alla riga 2, l'output è:

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

Provalo tu

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

// TODO: define tres closures (Int) -> Int y aplica cada una a nums con map
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Playground Swift