0Pricing
Dart Academy · Lekcja

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); // 10

reduce 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); // 9

Puł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); // 6

fold 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); // 123

fold 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); // 0

reduce 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); // 6

Szybkie 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

  1. Funkcje wyższego rzędu i curryfikacja
  2. fold, reduce i expand
  3. Leniwe obiekty iterowalne i generatory z sync*
  4. Tworzenie potoków funkcji czystych
← Powrót do Dart Academy