0Pricing
Dart Academy · Lezione

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 runs

Perché 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

  1. Funzioni di ordine superiore e currying
  2. fold, reduce ed espansione
  3. Iterable lazy e generatori con sync*
  4. Composizione di pipeline di funzioni pure
← Torna a Dart Academy