La proprietà lazy
Rimandi il lavoro di trasformazione finché non è necessario.
La proprietà lazy è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.
Eager per impostazione predefinita
I metodi standard delle collection sono eager: map, filter e così via vengono eseguiti immediatamente e costruiscono subito un nuovo array completo, anche se si legge soltanto il primo elemento.
Il lavoro eager avviene subito
Questo codice costruisce in anticipo l'intero array trasformato:
let nums = [1, 2, 3, 4, 5]
let doubled = nums.map { $0 * 2 } // whole array built now
print(doubled.first!) // 2La proprietà lazy
Ogni collection espone una vista .lazy. Le operazioni su una vista lazy sono differite: non vengono eseguite finché non si scorre la collection o non si richiede un elemento specifico.
Creare una vista lazy
È sufficiente anteporre .lazy alla concatenazione:
let nums = [1, 2, 3, 4, 5]
let view = nums.lazy.map { $0 * 2 }
// nothing computed yet
print(Array(view)) // [2, 4, 6, 8, 10]Dimostrare l'esecuzione differita
Gli effetti collaterali mostrano che la closure viene eseguita solo su richiesta:
let nums = [1, 2, 3]
let lazyMapped = nums.lazy.map { n -> Int in
print("transforming \(n)")
return n * 2
}
print("created view")
print(lazyMapped.first!) // prints "transforming 1" then 2lazy restituisce un tipo diverso
Una concatenazione lazy è un wrapper leggero, non un Array:
let nums = [1, 2, 3]
let view = nums.lazy.map { $0 + 1 }
print(type(of: view).self != [Int].self) // true -- it is a LazyMapSequenceMaterializzare una vista lazy
Quando serve memorizzare o restituire il risultato, lo si può convertire nuovamente in un array concreto con Array(...):
let nums = [1, 2, 3]
let result: [Int] = Array(nums.lazy.map { $0 * 10 })
print(result) // [10, 20, 30]lazy e first(where:)
La valutazione lazy è vantaggiosa quando ci si ferma in anticipo. Vengono elaborati soltanto gli elementi necessari per trovare una corrispondenza:
let nums = [1, 2, 3, 4, 5, 6]
let firstBig = nums.lazy.map { $0 * $0 }.first { $0 > 10 }
print(firstBig!) // 16 (stops at 4*4)lazy su un intervallo
Anche gli intervalli funzionano con lazy, una soluzione utile per sequenze grandi o quasi infinite:
let firstThree = (1...1000).lazy.map { $0 * $0 }.prefix(3)
print(Array(firstThree)) // [1, 4, 9]Quando la vista viene rivalutata
Una vista lazy ricalcola il risultato ogni volta che la si scorre — non memorizza alcun risultato. Se la si scorre due volte, la trasformazione viene eseguita due volte:
var calls = 0
let view = [1, 2].lazy.map { (n: Int) -> Int in calls += 1; return n }
_ = Array(view)
_ = Array(view)
print(calls) // 4Quando usare lazy
Aggiunga .lazy quando ha una concatenazione lunga ma consuma soltanto una parte del risultato — la prima corrispondenza, un prefisso o un singolo reduce. Per gli array piccoli consumati completamente, l'approccio eager è più semplice.
let nums = Array(1...100)
let result = nums.lazy.filter { $0 % 7 == 0 }.first
print(result!) // 7Verifica rapida
Che cosa cambia la proprietà .lazy nel comportamento di map e filter?
Riepilogo
Ha appreso le basi delle operazioni lazy:
- I metodi standard delle collection sono eager: costruiscono immediatamente gli array
.lazyrestituisce una vista differita, cioè un tipo di sequenza speciale- Il lavoro viene eseguito soltanto quando si scorre la collection o si richiede un elemento
- Si materializza il risultato con
Array(...); le viste vengono ricalcolate a ogni iterazione
Prossimo argomento: concatenazioni lazy di map e filter.
Impara Swift con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 122
- Lezioni
- 409
Domande Frequenti
La lezione «La proprietà lazy» è gratuita?
Sì — il testo completo di «La proprietà lazy» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.
Cosa imparerò in «La proprietà lazy»?
Rimandi il lavoro di trasformazione finché non è necessario. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Swift Academy?
Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «La proprietà lazy»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Swift Academy?
Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- La proprietà lazy
- map e filter lazy
- Compromessi tra lazy ed eager
- Creazione di sequenze lazy personalizzate