O que são tipos genéricos?
sobes.tech IA
Resposta da IA
Os tipos genéricos permitem definir classes, interfaces e métodos usando parâmetros de tipo. Isto aumenta a flexibilidade, a reutilização e a segurança de tipos do código, permitindo trabalhar com diferentes tipos de dados sem perder a verificação de tipos em tempo de compilação.
Vantagens principais:
- Segurança de tipos: O compilador verifica os tipos na fase de compilação, prevenindo erros em tempo de execução relacionados com incompatibilidades de tipos.
- Reutilização: O mesmo código pode ser usado com diferentes tipos de dados, reduzindo a duplicação de código.
- Desempenho: Em algumas linguagens (por exemplo, C#), os tipos genéricos são implementados considerando um tipo específico, o que pode melhorar o desempenho em comparação com o uso de
Object.
Exemplos de uso:
- Coleções: Listas, dicionários, conjuntos parametrizados pelo tipo de elementos.
- Métodos: Métodos que trabalham com qualquer tipo de dados que implemente uma interface específica.
- Classes: Classes envolventes, fábricas, que trabalham com tipos de parâmetros.
Exemplo em C#:
// Lista genérica
List<string> nomes = new List<string>();
nomes.Add("Alice");
nomes.Add("Bob");
// Método genérico
public T ObterPrimeiroElemento<T>(List<T> lista)
{
if (lista != null && lista.Count > 0)
{
return lista[0];
}
return default(T); // Retorna o valor padrão para o tipo T
}
Exemplo em Java:
// Lista genérica
List<String> nomes = new ArrayList<>();
nomes.add("Alice");
nomes.add("Bob");
// Método genérico
public <T> T obterPrimeiroElemento(List<T> lista) {
if (lista != null && !lista.isEmpty()) {
return lista.get(0);
}
return null; // Retorna null para tipos de referência
}
Exemplo em Python (type hinting):
from typing import List, TypeVar
T = TypeVar('T')
def obter_primeiro_elemento(dados: List[T]) -> T | None:
# A função pode trabalhar com qualquer lista e retornar um elemento dela
if dados:
return dados[0]
return None
nomes: List[str] = ["Alice", "Bob"]
primeiro_nome = obter_primeiro_elemento(nomes) # IDE entende que primeiro_nome é str
Em algumas linguagens (Java), os tipos genéricos usam "apagamento" (type erasure), onde a informação do tipo de parâmetro é removida na fase de compilação. Isto pode levar a algumas limitações. Em outras linguagens (C#, Go), a informação do tipo é mantida em tempo de execução.
Os tipos genéricos são uma ferramenta fundamental para escrever código limpo, seguro e reutilizável.