Faule Iterables und Generatoren mit sync*
Erzeugen Sie Werte nach Bedarf
Faule Iterables und Generatoren mit sync* ist eine kostenlose Dart Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Dart Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Dart Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lazy bedeutet
Ein lazy Iterable berechnet seine Werte erst, wenn Sie sie tatsächlich anfordern. Die Arbeit geschieht bei Bedarf und nicht alles auf einmal. 🦥
Iterables sind lazy
Methoden wie map und where geben ein lazy Iterable zurück. Nichts wird ausgeführt, bis Sie darüber iterieren oder toList aufrufen.
var it = [1, 2, 3].map((n) {
print('seen $n');
return n * 2;
});Noch wird nichts ausgeführt
Solange Sie dieses Iterable nicht verbrauchen, wird der Rumpf von map nie ausgeführt. Lazy-Auswertung ermöglicht es Ihnen, Arbeit zu beschreiben und die Kosten aufzuschieben.
for (var x in it) print(x); // now it runsWarum Lazy-Auswertung hilft
Lazy-Auswertung spart Arbeit, wenn Sie nur wenige Ergebnisse benötigen. In Kombination mit take können Sie frühzeitig abbrechen und den Rest überspringen.
var first2 = it.take(2).toList();sync*-Generatoren kennenlernen
Eine sync*-Funktion ist ein Generator, der ein lazy Iterable erzeugt. Sie liefert Werte einzeln, sobald diese angefordert werden.
Iterable<int> count(int n) sync* {
for (var i = 1; i <= n; i++) yield i;
}Das Schlüsselwort yield
In einem Generator gibt yield einen Wert an den Aufrufer zurück und pausiert, bis der nächste Wert benötigt wird.
print(count(3).toList()); // [1, 2, 3]Unendliche Sequenzen
Da die Werte lazy erzeugt werden, kann ein Generator sicher eine unendliche Sequenz beschreiben, solange Sie nur einen endlichen Ausschnitt entnehmen.
Iterable<int> naturals() sync* {
var i = 0;
while (true) yield ++i;
}Einen endlichen Ausschnitt entnehmen
Kombinieren Sie einen unendlichen Generator mit take, um nur das Benötigte zu entnehmen. Die Schleife stoppt, sobald Ihr Ausschnitt vollständig ist.
print(naturals().take(5).toList()); // [1, 2, 3, 4, 5]yield* delegiert
Verwenden Sie yield*, um jeden Wert aus einem anderen Iterable oder Generator auszugeben. Dadurch wird eine Sequenz in die aktuelle Sequenz eingefügt.
Iterable<int> both() sync* {
yield* count(2);
yield* count(2);
}Generatoren statt Listen aufzubauen
Ein Generator vermeidet den Aufbau einer vollständigen Liste im Speicher. Sie streamen die Werte, wodurch große oder endlose Sequenzen speicherschonend bleiben.
sync* im Vergleich zu async*
Verwenden Sie sync* für synchrone lazy Iterables. Das asynchrone Gegenstück async* erzeugt für asynchrone Ereignisse einen Stream.
Schnelltest
Testen Sie Ihr Verständnis von Generatoren.
Zusammenfassung
Iterables sind lazy, und sync*-Generatoren liefern Werte bei Bedarf. So können Sie sogar unendliche Sequenzen kostengünstig modellieren. 🌟
Häufig gestellte Fragen
Ist die Lektion „Faule Iterables und Generatoren mit sync*“ kostenlos?
Ja — der vollständige Text von „Faule Iterables und Generatoren mit sync*“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Dart Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Dart Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Faule Iterables und Generatoren mit sync*“?
Erzeugen Sie Werte nach Bedarf Du übst Dart Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Dart Academy zu starten?
Keine Vorkenntnisse erforderlich. Dart Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Faule Iterables und Generatoren mit sync*“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Dart Academy-Lektion Code schreiben und ausführen?
Ja. Jede Dart Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Funktionen höherer Ordnung und Currying
- fold, reduce und expand
- Faule Iterables und Generatoren mit sync*
- Zusammensetzen reiner Funktionspipelines