Extensões em genéricos
Estenda List, Iterable e parâmetros de tipo.
Extensões em genéricos é uma aula grátis de Dart Academy no CoddyKit. Esta é a aula 2 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.
Estendendo coleções
A verdadeira magia aparece quando você estende tipos genéricos como List ou Iterable. Uma única extensão pode ajudar todos os tipos de elementos de uma vez.
Declare um parâmetro de tipo
Coloque um parâmetro de tipo depois do nome da extensão e use-o na cláusula on. Assim, seu auxiliar permanece totalmente seguro quanto aos tipos.
extension Firsts<T> on List<T> {
T? get firstOrNull => isEmpty ? null : this[0];
}O tipo do elemento é preservado
Como você escreveu List of T, seu método retorna automaticamente o tipo correto do elemento. Sem conversões forçadas nem surpresas causadas por tipos dinâmicos.
List<int> nums = [1, 2, 3];
int? n = nums.firstOrNull; // typed as int?Estenda Iterable para alcançar mais casos
Estender Iterable em vez de List faz com que seu auxiliar funcione igualmente com listas, conjuntos e iteráveis preguiçosos. Maior alcance, o mesmo código.
extension Counts<T> on Iterable<T> {
int countWhere(bool Function(T) f) => where(f).length;
}Métodos genéricos internos
Um método de extensão também pode receber seus próprios parâmetros genéricos, separados do tipo que você está estendendo.
extension Mapping<T> on List<T> {
List<R> mapTo<R>(R Function(T) f) => map(f).toList();
}A inferência de tipos ajuda
Em geral, Dart infere os argumentos de tipo a partir do valor sobre o qual você chama o método, mantendo os pontos de chamada curtos e limpos.
var first = ["a", "b"].firstOrNull; // String?Estenda Map com dois tipos
Mapas precisam de dois parâmetros. Escreva Map of K, V e você poderá criar auxiliares que respeitam tanto as chaves quanto os valores.
extension MapPick<K, V> on Map<K, V> {
V? pick(K key) => this[key];
}Mantenha a segurança contra nulos
Retornar T? em vez de T indica que um valor pode estar ausente, mantendo as chamadas honestas sob a segurança contra nulos.
extension SafeLast<T> on List<T> {
T? get lastOrNull => isEmpty ? null : last;
}Reutilize entre tipos de elementos
Uma única extensão genérica atende a todos os tipos de elementos. O mesmo firstOrNull funciona com números, textos e suas próprias classes.
var who = <User>[].firstOrNull; // User?Restrinja quando necessário
Se seu auxiliar precisar de capacidades específicas, adicione um limite com extends para permitir apenas tipos de elementos adequados.
extension Sums<T extends num> on List<T> {
num total() => fold(0, (a, b) => a + b);
}Por que as extensões genéricas são melhores
Elas combinam reutilização e segurança: você escreve um auxiliar uma vez, e ele se adapta a qualquer tipo de elemento, preservando o tipo correto de retorno.
Verificação rápida
Uma verificação rápida sobre como manter as extensões seguras quanto aos tipos.
Recapitulação: extensões genéricas
Você pode adicionar um parâmetro de tipo a uma extensão, direcioná-la a List, Iterable ou Map e até limitá-la com extends para mantê-la reutilizável e segura. ✅
Perguntas Frequentes
A aula “Extensões em genéricos” é grátis?
Sim — o texto completo de “Extensões em genéricos” é 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 “Extensões em genéricos”?
Estenda List, Iterable e parâmetros de tipo. 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 2 de 4.
Quanto tempo leva a aula “Extensões em genéricos”?
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
- Escrever sua primeira extensão
- Extensões em genéricos
- Membros estáticos de extensão e conflitos
- Tipos de extensão para wrappers sem custo