Ograniczone parametry typów z extends
Ograniczanie wartości akceptowanych przez typ generyczny
Ograniczone parametry typów z extends to bezpłatna lekcja Dart Academy na CoddyKit. To lekcja 3 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.
Kiedy dowolny typ to za mało
Zwykły parametr typu akceptuje każdy typ, ale czasami potrzebne jest coś więcej. Można chcieć wywołać metodę, którą udostępniają tylko określone typy. 🔒
Ograniczenie za pomocą extends
Można dodać ograniczenie za pomocą extends. Oznacza ono, że parametr typu musi być podanym typem albo jego podtypem.
class Cage<T extends Animal> {}Co gwarantuje ograniczenie
Wewnątrz klasy Dart może teraz ufać, że T jest co najmniej typu Animal. Dzięki temu można bezpiecznie używać dowolnego składnika zdefiniowanego przez Animal.
class Cage<T extends Animal> {
void feed(T a) => a.eat();
}Odrzucanie nieprawidłowych typów
Kompilator blokuje każdy argument typu, który nie spełnia ograniczenia. Przekazanie niezwiązanego typu od razu powoduje błąd.
Cage<String>();Ograniczenie numeryczne
Typowym ograniczeniem jest num, czyli typ nadrzędny dla int i double. Pozwala ono generykowi wykonywać działania arytmetyczne, a jednocześnie akceptować oba typy liczb.
T addOne<T extends num>(T x) => x + 1 as T;Ograniczenia w metodach
Ograniczenia działają także w przypadku metod generycznych, a nie tylko klas. W metodzie extends należy umieścić bezpośrednio po nazwie parametru typu.
num biggest<T extends num>(List<T> xs) =>
xs.reduce((a, b) => a > b ? a : b);Domyślne ograniczenie to Object
Jeśli nie określi się ograniczenia, domyślnym ograniczeniem niejawnym jest Object?. Dlatego nieograniczone T pozwala używać tylko składników dostępnych dla każdego obiektu.
Ograniczenie Comparable
Aby sortować lub porównywać wartości, należy zastosować ograniczenie do Comparable. Wtedy w kodzie generycznym można wywoływać compareTo na przechowywanych wartościach.
T max<T extends Comparable<T>>(T a, T b) =>
a.compareTo(b) >= 0 ? a : b;Ograniczenia dokumentują intencję
Ograniczenie informuje także czytelników, jakie typy pasują w danym miejscu. Sygnatura sama wyjaśnia kontrakt oczekiwany przez kod.
Ograniczenia odwołujące się do siebie
Warto zauważyć, że T może występować we własnym ograniczeniu, jak w T extends Comparable of T. Ten wzorzec wiąże typ z operacjami wykonywanymi na nim samym.
Ograniczenia powinny być minimalne
Należy stosować najmniej restrykcyjne ograniczenie, które nadal spełnia wymagania. Nadmierne ograniczenie wyklucza prawidłowe typy, a całkowity brak ograniczenia uniemożliwia dostęp do przydatnych metod.
Szybkie sprawdzenie
Co umożliwia ograniczenie wewnątrz klasy?
Podsumowanie
Za pomocą extends można ograniczyć parametr typu, uzyskując dostęp do metod typu ograniczającego i odrzucając niezwiązane typy. Ograniczenia powinny być tak elastyczne, jak wymaga tego zadanie. ✅
Często zadawane pytania
Czy lekcja „Ograniczone parametry typów z extends” jest bezpłatna?
Tak — pełny tekst „Ograniczone parametry typów z extends” 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 „Ograniczone parametry typów z extends”?
Ograniczanie wartości akceptowanych przez typ generyczny Ć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 3 z 4.
Ile czasu zajmuje lekcja „Ograniczone parametry typów z extends”?
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
- Dlaczego generyki przewyższają dynamic
- Klasy i metody generyczne
- Ograniczone parametry typów z extends
- Kolekcje generyczne w praktyce