Introdução
Imagine que você está guardando objetos em caixas de mudança.
- Em um sistema sem inferência, você é obrigado a pegar uma caneta, escrever "Roupas" na caixa e só depois colocar as camisas dentro.
- Em um sistema com inferência de tipos, o sistema olha para as camisas que você está colocando na caixa e, automaticamente, cola o rótulo "Roupas" para você.
O compilador (o programa que traduz seu código para a linguagem da máquina) analisa o contexto imediato da variável no momento em que ela é criada.
Se você cria uma variável chamada nome e atribui a ela o valor "Maria", o compilador entende imediatamente: "Maria é um texto, logo, a variável 'nome' deve ser do tipo texto". Ele trava essa variável nesse tipo para o resto do programa.
- Código mais limpo (Menos Boilerplate): Você escreve menos. O código fica visualmente mais agradável e mais focado no que o programa deve fazer, e não nas burocracias da linguagem.
- Segurança garantida: É importante destacar que a inferência de tipos não torna a linguagem bagunçada. O tipo ainda existe e é rigoroso. Se o sistema inferiu que uma variável é um número, ele vai gerar um erro de compilação se você tentar guardar um texto nela logo depois.
- Agilidade no desenvolvimento: Permite que você programe com a velocidade e fluidez de linguagens dinâmicas, mas com a rede de segurança das linguagens estáticas.
Exemplos na Prática
Muitas linguagens modernas com tipagem estática adotaram a inferência de tipos para tornar a sintaxe mais amigável, parecida com a de linguagens dinâmicas (como Python ou JavaScript).
// Antes (sem inferência)
int idade = 30;
Dictionary<string, List<int>> mapa = new Dictionary<string, List<int>>();
// Com inferência (usando 'var')
var idade = 30; // O compilador sabe que é um 'int'
var mapa = new Dictionary<string, List<int>>(); // Código muito mais limpo
// O TypeScript infere automaticamente que 'mensagem' é do tipo string.
let mensagem = "Bem-vindo ao sistema";
// Se você tentar fazer isso depois, o compilador vai gerar um erro:
// mensagem = 42; -> Erro: O tipo 'number' não pode ser atribuído ao tipo 'string'.
Top comments (0)