Isso veio à tona em uma discussão com um amigo e me senti pressionado a pensar em bons argumentos. Quais benefícios a digitação fraca confere?
type-systems
type-safety
weak-typing
Fishtoaster
fonte
fonte
Respostas:
O problema desse tipo de discussão é simplesmente que os termos "digitação fraca" e "digitação forte" são indefinidos, diferentemente dos termos "digitação estática", "digitação dinâmica", "digitação dinâmica", "digitação explícita", "digitação implícita", " digitação de pato "," digitação estrutural "ou" digitação nominal ". Heck, mesmo os termos "digitação manifesta" e "digitação latente", que ainda são áreas abertas de pesquisa e discussão, provavelmente estão melhor definidos.
Portanto, até que seu amigo forneça uma definição do termo "digitação fraca" que seja estável o suficiente para servir de base a uma discussão, nem faz sentido responder a essa pergunta.
Infelizmente, além da resposta de Nick , nenhum dos respondentes também se preocupou em fornecer sua definição, e você pode ver a confusão que gera em alguns dos comentários. É difícil dizer, já que ninguém realmente fornece suas definições, mas acho que conto pelo menos três diferentes, apenas nesta página.
Algumas das definições mais usadas são (e sim, eu sei que praticamente nenhuma delas faz sentido, mas essas são as definições que eu vi as pessoas realmente usarem):
As três definições que parecem ser usadas mais amplamente, no entanto, são
A menos que todos concordam com uma definição do que "tipagem fraca" ainda é , não faz muito sentido pensar sobre o que as suas vantagens pode ser. Vantagens de quê? Pior ainda, se não houver definição alguma , todos poderão mudar suas definições para se ajustarem a seus argumentos, e é garantido que toda discussão se transforma em uma guerra de chamas.
Eu mesmo mudei pessoalmente minha própria definição várias vezes ao longo dos anos e agora cheguei ao ponto em que não considero mais os termos úteis. Eu também costumava pensar que a digitação fraca (em suas várias definições) tem um lugar no script de shell, mas sempre que tenho que resolver o mesmo problema no Bash e no PowerShell, sou dolorosamente lembrado de como estava errado.
fonte
Lembre-se de que existem dois conceitos principais que geralmente são confusos:
Digitação dinâmica
As vantagens aqui são frequentemente descartadas apenas como programadores "novos", mas também podem ser convenientes para qualquer programador:
Menos código em qualquer caso em que você precisaria converter ou atribuir um novo valor:
Digitação fraca ou fraca
Benefícios:
Avaliação booleana implícita . Qualquer tipo pode ser avaliado como um booleano. Isso também tem benefícios colaterais, como parte de um
||
pode ser usado na atribuição sem conversão para booleano:Novamente, menos código:
Até o Java teve que ir parcialmente, com a chamada implícita ao
.toString()
combinar objetos com aString
; caso contrário, os programadores Java o xingariam o dia inteiro (as instruções de log estariam fora de controle).Ambas as definições são de http://en.wikipedia.org/wiki/Type_system . Disse isso melhor do que eu poderia.
fonte
if
bloco é usado ou alguma outra lógica mais complexa (mesmo em tempo de execução ou dinâmica), a próxima linha será legal e segura contra erros.O principal argumento para a digitação fraca é o desempenho. (isso é para responder à pergunta dos POs, conforme indicado). Há muita discussão boa sobre dinâmico versus estático, implícito versus explícito. etc.
C é a linguagem de tipo fraco mais famosa e não executa nenhuma verificação de tempo de execução ou verificação de tempo de compilação do tipo de variáveis. Em essência, você pode converter um
char *
para umint *
e o idioma não se importaria. Então, por que você faria isso?A programação C é bem parecida com a que você faria com a montagem, portanto, há momentos em que você se preocupa apenas com um endereço. Não é incomum lançar ou passar uma
void *
referência por esse mesmo motivo. Se você souber como a memória está organizada (novamente uma questão de C e montagem), você pode fazer alguns cálculos bem legais com base no endereçovoid *
para obter as informações necessárias. Isso pode causar um curto-circuito no processo pelo qual você teria que passar em Java, por exemplo.Embora a verificação do tipo em tempo de execução não tenha uma sobrecarga extraordinária, há momentos em que isso é suficiente para fazer com que uma seção crítica seja muito lenta. Estou pensando principalmente em programação embarcada e sistemas em tempo real neste caso.
Dito isto, na maioria dos casos, ter um sistema de tipo forte que seja verificado em tempo de compilação ou em tempo de execução ajuda com mais frequência do que dói.
fonte
Tipicamente, a digitação fraca é mais fácil para os iniciantes, por exemplo, em coisas como excel, javascript e vbscript. Você também troca alguma velocidade de desenvolvimento por possíveis erros.
Bom artigo sobre o assunto: digitação forte vs teste forte
fonte