Dart Academy · leksjon

Avgrensede typeparametere med extends

Begrens hva en generisk type kan ta imot.

Leksjon 3 av 413 trinn

Avgrensede typeparametere med extends er en gratis leksjon i Dart Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Dart Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Dart Academy inneholder totalt 4 leksjoner.

Når én hvilken som helst type blir for mye

En vanlig typeparameter godtar alle typer, men noen ganger trenger du mer. Det kan hende du må kalle en metode som bare finnes på bestemte typer. 🔒

Typebegrensningen med extends

Du kan legge til en typebegrensning ved hjelp av extends. Det betyr at typeparameteren må være en bestemt type eller en undertype av den.

class Cage<T extends Animal> {}

Hva en typebegrensning garanterer

Inne i klassen stoler Dart nå på at T er minst en Animal. Derfor kan du trygt bruke alle medlemmer som Animal definerer.

class Cage<T extends Animal> {
  void feed(T a) => a.eat();
}

Avvise ugyldige typer

Kompilatoren blokkerer alle typeargumenter som ikke oppfyller typebegrensningen. Det blir umiddelbart rapportert som en feil hvis du sender inn en ubeslektet type.

Cage<String>();

En numerisk typebegrensning

En vanlig typebegrensning er num, som er overtypen til int og double. Den lar en generisk type utføre aritmetikk og samtidig godta begge talltypene.

T addOne<T extends num>(T x) => x + 1 as T;

Typebegrensninger på metoder

Typebegrensninger fungerer også på generiske metoder, ikke bare på klasser. Plasser extends rett etter typeparameterens navn i metoden.

num biggest<T extends num>(List<T> xs) =>
    xs.reduce((a, b) => a > b ? a : b);

Standardbegrensningen er Object

Når du utelater en typebegrensning, er den implisitte begrensningen Object?. Derfor kan en T uten begrensning bare bruke medlemmer som alle objekter har.

Comparable-begrensning

Hvis du skal sortere eller sammenligne, bruker du Comparable som begrensning. Da kan du kalle compareTo på verdiene i den generiske koden.

T max<T extends Comparable<T>>(T a, T b) =>
    a.compareTo(b) >= 0 ? a : b;

Typebegrensninger dokumenterer hensikten

En typebegrensning forteller også leserne hvilke typer som hører hjemme her. Selve signaturen forklarer kontrakten koden din forventer.

Selvrefererende typebegrensninger

Legg merke til at T kan forekomme i sin egen typebegrensning, som i T extends Comparable av T. Dette mønsteret knytter en type til operasjoner på seg selv.

Hold typebegrensningene minimale

Bruk den minst restriktive typebegrensningen som fortsatt fungerer. For strenge begrensninger utelukker gyldige typer, mens ingen begrensning gjør nyttige metoder utilgjengelige.

Hurtigsjekk

Hva lar en typebegrensning deg gjøre inne i klassen?

Oppsummering

Du har brukt extends til å begrense en typeparameter. Dermed får du tilgang til metodene på den begrensede typen, samtidig som ubeslektede typer avvises. Hold begrensningene så åpne som oppgaven tillater. ✅

Gratis å komme i gang

Lær deg Dart med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
30
Leksjoner
120

Ofte stilte spørsmål

Er leksjonen «Avgrensede typeparametere med extends» gratis?

Ja – hele teksten i «Avgrensede typeparametere med extends» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Dart Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Dart Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Avgrensede typeparametere med extends»?

Begrens hva en generisk type kan ta imot. Du øver på Dart Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Dart Academy?

Ingen tidligere erfaring er nødvendig. Dart Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Avgrensede typeparametere med extends»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Dart Academy-leksjonen?

Ja. Alle Dart Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Derfor er generiske typer bedre enn dynamic
  2. Generiske klasser og metoder
  3. Avgrensede typeparametere med extends
  4. Generiske samlinger i praksis
← Tilbake til Dart Academy