0Pricing
Dart Academy · Lekcja

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

  1. Dlaczego generyki przewyższają dynamic
  2. Klasy i metody generyczne
  3. Ograniczone parametry typów z extends
  4. Kolekcje generyczne w praktyce
← Powrót do Dart Academy