Sobes.tech
Junior

O que são genéricos?

sobes.tech IA

Resposta da IA

Os genéricos na programação são um meio de criar componentes reutilizáveis que podem trabalhar com diferentes tipos de dados sem perder a segurança de tipos. Permitem escrever classes, interfaces e métodos que operam com parâmetros de tipo.

As principais vantagens:

  • Segurança de tipos na fase de compilação: Os erros relacionados com incompatibilidades de tipos são detectados antes da execução do programa.
  • Redução da duplicação de código: Pode-se escrever um algoritmo ou estrutura de dados universal que funciona com diferentes tipos.
  • Desempenho: Ao contrário do uso de tipos genéricos (como Object), não é necessário fazer conversões de tipos (cast), o que pode melhorar o desempenho.

Exemplo em Java:

// Classe List sem genéricos (abordagem obsoleta)
List list = new ArrayList();
list.add("olá");
list.add(123); // Pode adicionar qualquer tipo
String s = (String) list.get(0); // É necessária conversão manual de tipos
Integer i = (Integer) list.get(1); // É necessária conversão manual de tipos

// Classe List com genéricos
List<String> stringList = new ArrayList<>();
stringList.add("mundo");
// stringList.add(123); // Erro de compilação! Apenas strings permitidas

String s2 = stringList.get(0); // Não é necessária conversão de tipos

Os genéricos permitem especificar o tipo de dado com o qual a coleção ou outra classe ou interface genérica irá trabalhar. Isso garante a segurança de tipos e evita erros em tempo de execução relacionados com tipos de dados incorretos.

Por exemplo, em C#, os genéricos também são usados em coleções:

// Lista de strings usando genéricos
List<string> nomes = new List<string>();
nomes.Add("Alice");
// nomes.Add(123); // Erro de compilação

string primeiroNome = nomes[0]; // Não é necessário conversão de tipos

Em Python, a ideia de genéricos é implementada usando anotações de tipos (type hints) e o módulo typing:

from typing import List, Dict, Any

# Lista de strings com anotação de tipo
def processar_strings(dados: List[str]):
    for item in dados:
        print(item)

# Dicionário com chaves de strings e valores de qualquer tipo
def processar_dicionario(dados: Dict[str, Any]):
    for chave, valor in dados.items():
        print(f"{chave}: {valor}")

Embora em Python as anotações de tipos não garantam a segurança em tempo de execução (isso é tarefa de analisadores estáticos como MyPy), elas melhoram significativamente a legibilidade do código e facilitam a depuração.

No geral, os genéricos são uma ferramenta poderosa para criar código flexível, reutilizável e seguro em várias linguagens de programação.