0Pricing
Dart Academy · Aula

Parâmetros de tipo limitados com extends

Restrinja o que um tipo genérico pode aceitar.

Parâmetros de tipo limitados com extends é uma aula grátis de Dart Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Dart Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Dart Academy inclui 4 aulas no total.

Quando qualquer tipo é demais

Um parâmetro de tipo simples aceita qualquer tipo, mas às vezes é necessário mais. Talvez o senhor queira chamar um método que somente alguns tipos oferecem. 🔒

A restrição com extends

O senhor pode adicionar uma restrição usando extends. Isso determina que o parâmetro de tipo deve ser um tipo específico ou um subtipo dele.

class Cage<T extends Animal> {}

O que uma restrição garante

Dentro da classe, o Dart agora confia que T é pelo menos um Animal. Assim, o senhor pode usar com segurança qualquer membro definido por Animal.

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

Rejeitando tipos inválidos

O compilador bloqueia qualquer argumento de tipo que não satisfaça a restrição. Passar um tipo sem relação é um erro que o senhor vê imediatamente.

Cage<String>();

Uma restrição numérica

Uma restrição comum é num, o tipo pai de int e double. Ela permite que um genérico faça operações aritméticas e ainda aceite os dois tipos numéricos.

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

Restrições em métodos

As restrições também funcionam em métodos genéricos, não apenas em classes. Coloque extends logo depois do nome do parâmetro de tipo no método.

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

A restrição padrão é Object

Quando o senhor omite uma restrição, a restrição implícita é Object?. Por isso, um T sem restrição permite usar apenas membros que todo objeto possui.

Restrição comparável

Para ordenar ou comparar, use Comparable como restrição. Assim, o senhor pode chamar compareTo nos valores dentro do código genérico.

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

Restrições documentam a intenção

Uma restrição também informa aos leitores quais tipos pertencem a esse contexto. A própria assinatura explica o contrato esperado pelo código.

Restrições autorreferentes

Observe que T pode aparecer em sua própria restrição, como em T extends Comparable de T. Esse padrão vincula um tipo às operações realizadas sobre ele mesmo.

Mantenha as restrições mínimas

Use a restrição menos específica que ainda funcione. Restrições excessivas excluem tipos válidos, enquanto não usar restrição alguma pode deixar métodos úteis inacessíveis.

Verificação rápida

O que uma restrição permite fazer dentro da classe?

Recapitulação

O senhor usou extends para restringir um parâmetro de tipo, liberando os métodos do tipo restrito e rejeitando tipos sem relação. Mantenha as restrições tão flexíveis quanto a tarefa exigir. ✅

Perguntas Frequentes

A aula “Parâmetros de tipo limitados com extends” é grátis?

Sim — o texto completo de “Parâmetros de tipo limitados com extends” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Dart Academy, atualize para CoddyKit PRO. O curso de Dart Academy inclui 4 aulas no total.

O que vou aprender em “Parâmetros de tipo limitados com extends”?

Restrinja o que um tipo genérico pode aceitar. Você pratica Dart Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Dart Academy?

Nenhuma experiência prévia é necessária. Dart Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Parâmetros de tipo limitados com extends”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Dart Academy?

Sim. Cada aula de Dart Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Por que genéricos superam dynamic
  2. Classes e métodos genéricos
  3. Parâmetros de tipo limitados com extends
  4. Coleções genéricas na prática
← Voltar para Dart Academy