Rozszerzenia dla generyków
Rozszerzanie List, Iterable i parametrów typów
Rozszerzenia dla generyków 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.
Rozszerzanie kolekcji
Prawdziwa magia pojawia się przy rozszerzaniu typów generycznych, takich jak List lub Iterable. Jedno rozszerzenie może od razu pomóc przy każdym typie elementu.
Zadeklaruj parametr typu
Umieść parametr typu po nazwie rozszerzenia, a następnie użyj go w klauzuli on. Dzięki temu funkcja pomocnicza pozostaje w pełni bezpieczna typowo.
extension Firsts<T> on List<T> {
T? get firstOrNull => isEmpty ? null : this[0];
}Typ elementu przepływa dalej
Ponieważ zapisali Państwo List of T, metoda automatycznie zwraca właściwy typ elementu. Bez rzutowania i bez niespodzianek związanych z dynamic.
List<int> nums = [1, 2, 3];
int? n = nums.firstOrNull; // typed as int?Rozszerz Iterable, aby zwiększyć zasięg
Rozszerzenie Iterable zamiast List sprawia, że funkcja pomocnicza działa zarówno na listach, zbiorach, jak i leniwie obliczanych iterowalnych kolekcjach. Większy zasięg, ten sam kod.
extension Counts<T> on Iterable<T> {
int countWhere(bool Function(T) f) => where(f).length;
}Metody generyczne wewnątrz
Metoda rozszerzenia może również przyjmować własne parametry generyczne, niezależne od typu, który Państwo rozszerzają.
extension Mapping<T> on List<T> {
List<R> mapTo<R>(R Function(T) f) => map(f).toList();
}Wnioskowanie typów pomaga
Dart zwykle wnioskuje argumenty typów na podstawie wartości, na której wywołują Państwo metodę, dzięki czemu miejsca wywołań pozostają krótkie i przejrzyste.
var first = ["a", "b"].firstOrNull; // String?Rozszerz Map o dwa typy
Mapy wymagają dwóch parametrów. Zapisz Map of K, V, aby tworzyć funkcje pomocnicze uwzględniające zarówno klucze, jak i wartości.
extension MapPick<K, V> on Map<K, V> {
V? pick(K key) => this[key];
}Zachowaj bezpieczeństwo null
Zwrócenie T? zamiast T sygnalizuje, że może brakować wartości, i wymusza poprawną obsługę tego przypadku przy bezpieczeństwie null.
extension SafeLast<T> on List<T> {
T? get lastOrNull => isEmpty ? null : last;
}Wykorzystuj ponownie dla różnych typów elementów
Jedno generyczne rozszerzenie obsługuje każdy typ elementu. To samo firstOrNull działa dla liczb, napisów i własnych klas.
var who = <User>[].firstOrNull; // User?Dodaj ograniczenie, gdy jest potrzebne
Jeśli funkcja pomocnicza wymaga konkretnych możliwości, dodaj ograniczenie za pomocą extends, aby dozwolone były tylko odpowiednie typy elementów.
extension Sums<T extends num> on List<T> {
num total() => fold(0, (a, b) => a + b);
}Dlaczego wygrywają rozszerzenia generyczne
Łączą ponowne użycie z bezpieczeństwem: wystarczy raz napisać funkcję pomocniczą, a dostosuje się do dowolnego typu elementu, zachowując prawidłowy typ zwracany.
Szybkie sprawdzenie
Szybkie sprawdzenie zachowania bezpieczeństwa typów w rozszerzeniach.
Podsumowanie: rozszerzenia generyczne
Mogą Państwo dodać do rozszerzenia parametr typu, rozszerzać List, Iterable lub Map, a także ograniczyć typ za pomocą extends, aby zachować możliwość ponownego użycia i bezpieczeństwo. ✅
Często zadawane pytania
Czy lekcja „Rozszerzenia dla generyków” jest bezpłatna?
Tak — pełny tekst „Rozszerzenia dla generyków” 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 „Rozszerzenia dla generyków”?
Rozszerzanie List, Iterable i parametrów typów Ć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 „Rozszerzenia dla generyków”?
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
- Pisanie pierwszego rozszerzenia
- Rozszerzenia dla generyków
- Statyczne elementy rozszerzeń i konflikty
- Typy rozszerzeń jako opakowania bez kosztu