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
- Por que genéricos superam dynamic
- Classes e métodos genéricos
- Parâmetros de tipo limitados com extends
- Coleções genéricas na prática