Parece que todas as novas linguagens de programação ou pelo menos as que se tornaram populares usam inferência de tipos. Até o Javascript obteve tipos e inferência de tipos através de várias implementações (Acscript, texto datilografado etc). Parece ótimo para mim, mas estou me perguntando se há algum trade-offs ou por que, digamos, Java ou as boas linguagens antigas não têm inferência de tipo
- Ao declarar uma variável em Go sem especificar seu tipo (usando var sem um tipo ou a sintaxe: =), o tipo da variável é deduzido do valor no lado direito.
- D permite escrever grandes fragmentos de código sem especificar tipos redundantes, como fazem as linguagens dinâmicas. Por outro lado, a inferência estática deduz tipos e outras propriedades de código, fornecendo o melhor dos mundos estático e dinâmico.
- O mecanismo de inferência de tipo no Rust é bastante inteligente. Ele faz mais do que olhar para o tipo de valor r durante uma inicialização. Também mostra como a variável é usada posteriormente para inferir seu tipo.
- O Swift usa a inferência de tipo para calcular o tipo apropriado. A inferência de tipo permite que um compilador deduza o tipo de uma expressão específica automaticamente quando compila seu código, simplesmente examinando os valores que você fornece.
var
e C ++ auto
) e inferência de tipo (bidirecional, como Haskell let
). No primeiro caso, o tipo de um nome pode ser deduzido apenas do inicializador - seus usos devem seguir o tipo do nome. No último caso, o tipo de um nome também pode ser deduzido de seus usos - o que é útil porque você pode escrever simplesmente []
para uma sequência vazia, independentemente do tipo de elemento, ou newEmptyMVar
para uma nova referência mutável nula, independentemente do referente tipo.
var
porque às vezes pode prejudicar a legibilidade.