Executando verificação de segurança...
4

Primeiramente, vamos aproveitar para esclarecer alguns termos sobre tipagem. Segue abaixo uma versão resumida desta explicação:

Existem tipagem estática e dinâmica, e tipagem fraca e forte, e é possível ter combinações (uma linguagem pode ter tipagem estática e forte, ou dinâmica e forte, ou estática e fraca, ou dinâmica e fraca).

Tipagem estática é quando uma variável não pode mudar seu tipo. Por exemplo, em Java, se eu definir que uma variável é de um tipo, não posso atribuir um valor de outro tipo (exceto se forem compatíveis, como no caso de sub-classes, por exemplo):

// Java, tipagem estática (o tipo da variável não pode mudar)
int x = 1;
x = "abc"; // erro: não posso atribuir uma String em uma variável com tipo incompatível

Tipagem dinâmica é quando a variável pode mudar o tipo. Por exemplo, em JavaScript:

// JavaScript, tipagem dinâmica (o tipo da variável pode mudar)
var x = 1;
x = "abc"; //operação normal, o tipo que era um number passa ser string

Já as tipagens forte e fraca não são conceitos bem definidos e aceitos universalmente, e por vezes são confundidos com tipagem estática e dinâmica. De qualquer forma, a "força" da tipagem costuma estar associado ao fato de um dado poder ser tratado como se fosse de outro tipo. Em C, por exemplo, vc pode gravar um int e acessá-lo como se fosse um ponteiro, entre outras maluquices que embora possíveis, nem sempre são úteis. Ou seja, C tem tipagem estática (uma variável não pode mudar o tipo) e fraca (um dado pode ser acessado como se fosse de outro tipo).

Também existem as linguagens que fazem coerção automática de tipos, como por exemplo PHP, na qual comparar um número com uma string pode ser verdadeiro (1 == "1" - um dos valores é convertido para o tipo do outro, e depois é feita a comparação). Nesse caso, seria tipagem fraca (um dado é acessado como se fosse de outro tipo), além de ser dinâmica (em PHP, uma variável pode mudar seu tipo).

Já Python tem tipagem dinâmica e forte: uma variável pode mudar o tipo, mas o valor não pode ser acessado como se fosse de outro (ao contrário de PHP, em Python 1 == "1" é falso), não há coerção automática.


Dito isso, falando de forma geral, o link já citado possui uma tabela que resume as vantagens e desvantagens de cada tipo:

Tipagem estáticaTipagem dinâmica
Descobre erros antesDescobre erros no último momento
O código costuma ser mais legível. Os tipos aparecem no código ou o IDE consegue mostrarO programador precisa entender e documentar o código para saber os tipos e nunca é garantido
Fornece melhor semântica para o códigoA tipagem funciona mais como um mecanismo
Fornece melhor performance na maioria dos casosA performance é inferior
SegurançaConcisão
Qualquer alteração no problema exige mudança no códigoAlterações podem ser assimiladas sem alteração no código específico
Ferramentas de desenvolvimento possuem mais informações e podem ajudar mais o programadorÉ dificil ou impossível criar/usar determinadas ferramentas que ajudam o programador
Regras do objeto são bem definidas e fixasRegras variam com o estado do objeto
Facilita a formalizaçãoFacilita o experimento
RigidezFlexibilidade
Mais difícil de aprender e usarMais difícil de manutenção
Reduz a necessidade de testesExige testes em cima dos tipos
Reutilização de código é mais complicadaReutilização de código é mais arriscada
Metaprogramação é complicadaMetaprogramação é mais fácil
Facilita grandes programasFacilita pequenos programas
São consideradas tirânicas (fun)São consideradas subversivas (fun)

As principais vantagens das "linguagens estáticas" são a segurança, performance e auxílio em tempo de desenvolvimento (refatoração, completação de código, informação auxiliar, cobertura de código etc.).

As "linguagens dinâmicas" são flexíveis, rápidas para prototipar, concisas.

Ou seja, pra variar, não existe essa de que uma das opções é sempre melhor. Saiba as vantagens e desvantagens de cada uma, e avalie qual usar em cada situação (claro que pra saber quando usar, também precisa de experiência, mas de qualquer forma, agora vc tem mais informações para decidir melhor).

Falando por mim, acho que a tipagem estática ajuda em bases de código grandes (sendo que "grande" é subjetivo). Muita gente tem percebido o mesmo, o que ajuda a explicar a crescente popularidade e adoção do TypeScript, por exemplo. Além disso, a declaração de tipos explícitos têm sido adicionada em linguagens como PHP e Python.


Por fim, sobre a "força" da tipagem, vale mencionar que na verdade o buraco é mais embaixo, e sugiro esta leitura, que é um ótimo ponto de partida para um aprofundamento maior sobre o tema.

Carregando publicação patrocinada...