O Que É um Sistema de Tipos? Regras Que Governam os Valores
Um sistema de tipos é o conjunto de regras que uma linguagem usa para classificar valores em tipos e verificar que as operações que você aplica a eles são válidas.
Toda linguagem tem alguma noção de tipos, inteiros, strings, listas, objetos personalizados, e um sistema de tipos é o corpo de regras que os governa. Ele define quais tipos existem, como se combinam e quais operações são permitidas sobre quais tipos. Um bom sistema de tipos descarta operações sem sentido (somar um número a uma função) e, em formas mais fortes, previne categorias inteiras de bugs.
O que um sistema de tipos faz
Um sistema de tipos atribui um tipo a cada valor e expressão, então impõe regras sobre como podem ser usados. Ele rejeita operações que não fazem sentido para os tipos envolvidos, transformando certos bugs em erros antes que possam causar dano.
Dimensões dos sistemas de tipos
- Estático vs dinâmico: tipos verificados em tempo de compilação ou de execução.
- Forte vs fraco: quão estritamente as regras são impostas.
- Nominal vs estrutural: identidade por nome ou por forma.
- Inferido vs explícito: quanto você precisa anotar.
Tipagem forte vs fraca
Um sistema de tipos forte resiste a conversões implícitas, você não pode silenciosamente somar um número a uma string. Um fraco realiza coerções surpreendentes. A força é sobre quão tolerantes (ou não) são as regras, e é separada de estático versus dinâmico.
Por que sistemas de tipos importam
Um sistema de tipos é uma forma de verificação embutida e sempre ativa. Sistemas mais ricos podem codificar invariantes (não nulo, apenas estados válidos) de modo que, se o código compila, certos bugs são simplesmente impossíveis. Essa é verificação que você obtém de graça em todo build.
Um exemplo rápido
Um sistema de tipos permite que uma assinatura como function greet(name: string): string garanta que os chamadores passem uma string e recebam uma string, rejeitando qualquer chamada que viole o contrato.
Sistemas de tipos em CI
Rodar o verificador de tipos em CI transforma o sistema de tipos num portão que toda mudança deve passar, pegando incompatibilidades antes da revisão. Erros de tipo falham deterministicamente e devem ser corrigidos, não repetidos. A Latchkey acelera verificações de tipo pesadas com runners maiores e repete apenas falhas transitórias de infraestrutura.
Principais conclusões
- Um sistema de tipos são as regras que uma linguagem usa para classificar valores e validar operações.
- Ele varia ao longo de eixos como estático/dinâmico, forte/fraco e inferido/explícito.
- Sistemas de tipos mais fortes agem como verificação embutida, descartando classes de bugs.