Iterable lazy e generatori con sync*
Produrre valori su richiesta
Iterable lazy e generatori con sync* è una lezione Dart Academy gratuita su CoddyKit. Questa è la lezione 3 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 Dart Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Dart Academy include 4 lezioni in totale.
Che cosa significa lazy
Un iterable lazy non calcola i propri valori finché non li richiede effettivamente. Il lavoro viene eseguito su richiesta, non tutto in una volta. 🦥
Gli Iterable sono lazy
Metodi come map e where restituiscono un Iterable lazy. Nulla viene eseguito finché non si itera o non si chiama toList.
var it = [1, 2, 3].map((n) {
print('seen $n');
return n * 2;
});Non viene ancora eseguito nulla
Finché non consuma quell'iterable, il corpo di map non viene mai eseguito. La valutazione lazy consente di descrivere il lavoro e rimandarne il costo.
for (var x in it) print(x); // now it runsPerché la valutazione lazy è utile
La valutazione lazy evita lavoro quando servono solo pochi risultati. Insieme a take, consente di fermarsi in anticipo e ignorare il resto.
var first2 = it.take(2).toList();Ecco i generatori sync*
Una funzione sync* è un generatore che costruisce un Iterable lazy. Produce i valori uno alla volta, quando vengono richiesti.
Iterable<int> count(int n) sync* {
for (var i = 1; i <= n; i++) yield i;
}La parola chiave yield
All'interno di un generatore, yield restituisce un valore al chiamante e mette in pausa l'esecuzione finché non serve il valore successivo.
print(count(3).toList()); // [1, 2, 3]Sequenze infinite
Poiché i valori sono lazy, un generatore può descrivere in sicurezza una sequenza infinita, purché ne si estragga solo una porzione finita.
Iterable<int> naturals() sync* {
var i = 0;
while (true) yield ++i;
}Estrarre una porzione finita
Abbini un generatore infinito a take per ottenere solo ciò che le serve. Il ciclo si interrompe non appena la porzione richiesta è completa.
print(naturals().take(5).toList()); // [1, 2, 3, 4, 5]yield* delega
Utilizzi yield* per emettere ogni valore di un altro iterable o generatore. In questo modo appiattisce una sequenza nella sequenza corrente.
Iterable<int> both() sync* {
yield* count(2);
yield* count(2);
}Generatori e costruzione di liste
Un generatore evita di costruire in memoria una lista completa. I valori vengono prodotti in streaming, mantenendo leggere in termini di memoria le sequenze grandi o infinite.
sync* e async*
Utilizzi sync* per gli iterable lazy sincroni. Il suo corrispondente asincrono, async*, produce uno Stream per le sequenze di eventi asincrone.
Verifica rapida
Verifichi la Sua comprensione dei generatori.
Riepilogo
Gli Iterable sono lazy e i generatori sync* producono valori su richiesta. Questo consente di modellare in modo economico anche sequenze infinite. 🌟
Domande Frequenti
La lezione «Iterable lazy e generatori con sync*» è gratuita?
Sì — il testo completo di «Iterable lazy e generatori con sync*» è 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 Dart Academy, passa a CoddyKit PRO. Il corso Dart Academy include 4 lezioni in totale.
Cosa imparerò in «Iterable lazy e generatori con sync*»?
Produrre valori su richiesta Eserciti Dart 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 Dart Academy?
Non è richiesta alcuna esperienza precedente. Dart 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 3 di 4.
Quanto tempo richiede la lezione «Iterable lazy e generatori con sync*»?
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 Dart Academy?
Sì. Ogni lezione Dart 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
- Funzioni di ordine superiore e currying
- fold, reduce ed espansione
- Iterable lazy e generatori con sync*
- Composizione di pipeline di funzioni pure