fold, reduce und expand
Aggregieren und glätten Sie Iterables
fold, reduce und expand ist eine kostenlose Dart Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.
Eine Collection aggregieren
Oft möchten Sie eine ganze Liste zu einem Wert zusammenfassen, etwa zu einer Summe oder einem Maximum. Dart bietet dafür fold und reduce. 🧮
reduce kennenlernen
reduce kombiniert die Elemente paarweise mithilfe Ihrer Funktion. Es beginnt mit dem ersten Element, daher darf die Liste nicht leer sein.
var sum = [1, 2, 3, 4].reduce((a, b) => a + b);
print(sum); // 10reduce führt ein Ergebnis weiter
Bei jedem Schritt werden das bisherige Ergebnis und das nächste Element übergeben. Stellen Sie sich a als Akkumulator vor, der während des Durchlaufs wächst.
var max = [3, 9, 2].reduce((a, b) => a > b ? a : b);
print(max); // 9Die Falle der leeren Liste
Der Aufruf von reduce auf einer leeren Liste löst einen StateError aus. Wenn eine Liste leer sein könnte, verwenden Sie stattdessen fold.
fold kennenlernen
fold ähnelt reduce, aber Sie übergeben einen Startwert. Dieser Startwert legt den Ergebnistyp fest und behandelt leere Listen sicher.
var total = [1, 2, 3].fold(0, (a, b) => a + b);
print(total); // 6fold kann den Typ ändern
Da der Startwert den Typ festlegt, kann fold eine Liste von ints in einen String, eine Map oder jeden anderen benötigten Typ umwandeln.
var joined = [1, 2, 3].fold('', (a, b) => '$a$b');
print(joined); // 123fold ist bei leeren Listen sicher
Bei einer leeren Liste gibt fold einfach den Startwert zurück. Kein Absturz und kein Sonderfall, den Sie sich merken müssen.
var s = <int>[].fold(0, (a, b) => a + b);
print(s); // 0reduce im Vergleich zu fold
Verwenden Sie reduce für eine schnelle Kombination desselben Typs in einer nicht leeren Liste. Greifen Sie zu fold, wenn Sie einen Startwert oder einen neuen Ergebnistyp benötigen.
expand kennenlernen
expand bildet jedes Element auf ein Iterable ab und flacht anschließend alle Ergebnisse zu einem einzigen Datenstrom von Werten ab. Es ist map plus flatten.
var r = [1, 2].expand((n) => [n, n * 10]);
print(r.toList()); // [1, 10, 2, 20]Verschachtelte Listen abflachen
Eine häufige Aufgabe für expand ist, eine Liste von Listen mit einem einzigen sauberen Aufruf in eine flache Liste umzuwandeln.
var flat = [[1, 2], [3, 4]].expand((x) => x);
print(flat.toList()); // [1, 2, 3, 4]Die drei Methoden verketten
Diese Methoden lassen sich hervorragend kombinieren. Sie können mit expand abflachen und anschließend mit fold aggregieren – in einer einzigen gut lesbaren Pipeline.
var t = [[1, 2], [3]].expand((x) => x).fold(0, (a, b) => a + b);
print(t); // 6Schnelltest
Wählen Sie das richtige Werkzeug für eine leere-sichere Summe.
Zusammenfassung
reduce kombiniert, fold kombiniert mit einem Startwert und expand flacht ab. Zusammen aggregieren sie jede Collection mühelos. 🎉
Häufig gestellte Fragen
Ist die Lektion „fold, reduce und expand“ kostenlos?
Ja — der vollständige Text von „fold, reduce und expand“ 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 „fold, reduce und expand“?
Aggregieren und glätten Sie Iterables 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 2 von 4.
Wie lange dauert die Lektion „fold, reduce und expand“?
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