fold, reduce i expand
Agregowanie i spłaszczanie obiektów iterowalnych
fold, reduce i expand to bezpłatna lekcja Dart Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Dart Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Dart Academy zawiera 4 lekcji w sumie.
Agregowanie kolekcji
Często zachodzi potrzeba zredukowania całej listy do jednej wartości, na przykład sumy lub maksimum. Dart udostępnia do tego celu metody fold i reduce. 🧮
Poznajmy reduce
reduce łączy elementy parami za pomocą przekazanej funkcji. Rozpoczyna od pierwszego elementu, dlatego lista nie może być pusta.
var sum = [1, 2, 3, 4].reduce((a, b) => a + b);
print(sum); // 10reduce przechowuje wynik
Każdy krok otrzymuje dotychczasowy wynik oraz kolejny element. Wartość a można traktować jako akumulator, który rośnie w trakcie działania.
var max = [3, 9, 2].reduce((a, b) => a > b ? a : b);
print(max); // 9Pułapka pustej listy
Wywołanie reduce na pustej liście powoduje błąd StateError. Jeśli lista może być pusta, należy zamiast tego użyć fold.
Poznajmy fold
fold działa podobnie do reduce, ale przyjmuje wartość początkową. Ziarno określa typ wyniku i bezpiecznie obsługuje puste listy.
var total = [1, 2, 3].fold(0, (a, b) => a + b);
print(total); // 6fold może zmienić typ
Ponieważ typ określa ziarno, fold może przekształcić listę wartości typu int w String, Map lub dowolny inny potrzebny typ.
var joined = [1, 2, 3].fold('', (a, b) => '$a$b');
print(joined); // 123fold jest bezpieczne dla pustej listy
W przypadku pustej listy fold po prostu zwraca ziarno. Bez awarii i bez konieczności zapamiętywania dodatkowego przypadku.
var s = <int>[].fold(0, (a, b) => a + b);
print(s); // 0reduce a fold
Metody reduce należy używać do szybkiego łączenia elementów tego samego typu w niepustej liście. Po fold warto sięgać, gdy potrzebne jest ziarno lub nowy typ wyniku.
Poznajmy expand
expand przekształca każdy element w obiekt iterowalny, a następnie spłaszcza je wszystkie do jednego strumienia wartości. To połączenie map i flatten.
var r = [1, 2].expand((n) => [n, n * 10]);
print(r.toList()); // [1, 10, 2, 20]Spłaszczanie zagnieżdżonych list
Typowym zastosowaniem expand jest przekształcenie listy list w jedną płaską listę za pomocą jednego czytelnego wywołania.
var flat = [[1, 2], [3, 4]].expand((x) => x);
print(flat.toList()); // [1, 2, 3, 4]Łączenie trzech metod
Te metody doskonale się komponują. Można użyć expand do spłaszczenia danych, a następnie fold do ich agregacji w jednym czytelnym pipeline.
var t = [[1, 2], [3]].expand((x) => x).fold(0, (a, b) => a + b);
print(t); // 6Szybkie sprawdzenie
Należy wybrać odpowiednie narzędzie do sumowania bezpiecznego dla pustej listy.
Podsumowanie
reduce łączy elementy, fold łączy je z użyciem ziarna, a expand spłaszcza dane. Razem pozwalają z łatwością agregować dowolną kolekcję. 🎉
Często zadawane pytania
Czy lekcja „fold, reduce i expand” jest bezpłatna?
Tak — pełny tekst „fold, reduce i expand” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Dart Academy, przejdź na CoddyKit PRO. Kurs Dart Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „fold, reduce i expand”?
Agregowanie i spłaszczanie obiektów iterowalnych Ćwiczysz Dart Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Dart Academy?
Nie wymagamy żadnego doświadczenia. Dart Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „fold, reduce i expand”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Dart Academy?
Tak. Każda lekcja Dart Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Funkcje wyższego rzędu i curryfikacja
- fold, reduce i expand
- Leniwe obiekty iterowalne i generatory z sync*
- Tworzenie potoków funkcji czystych