Eu me pergunto por que as linguagens de tipo fraco ainda estão sendo ativamente desenvolvidas. Por exemplo, que benefício se pode tirar por escrever
$someVar = 1;
(...) // Some piece of code
$someVar = 'SomeText';
em vez de usar a versão muito diferente e de tipo forte
int someInt = 1;
(...)
string SomeString = 'SomeText';
É verdade que você precisa declarar uma variável adicional no segundo exemplo, mas isso realmente dói? Todos os idiomas não devem se esforçar para ser fortemente tipados, uma vez que reforçam a segurança de tipo no tempo de compilação, evitando assim algumas armadilhas na conversão de tipo?
weak-typing
DotNetStudent
fonte
fonte
Respostas:
Tipagem forte / fraca e tipagem estática / dinâmica são ortogonais.
Forte / fraco é sobre se o tipo de valor é importante, funcionalmente falando. Em um idioma de tipo fraco, você pode pegar duas cadeias que são preenchidas com dígitos e executar a adição de números inteiros; em um idioma de tipo forte, isso é um erro (a menos que você converta ou converta os valores nos tipos corretos primeiro). A digitação forte / fraca não é uma coisa em preto e branco; a maioria dos idiomas não é 100% rigorosa nem 100% fraca.
A digitação estática / dinâmica é sobre se os tipos se ligam a valores ou a identificadores. Em um idioma de tipo dinâmico, você pode atribuir qualquer valor a qualquer variável, independentemente do tipo; a digitação estática define um tipo para cada identificador e a atribuição de um tipo diferente é um erro ou resulta em uma conversão implícita. Algumas linguagens adotam uma abordagem híbrida, permitindo tipos declarados estaticamente, bem como identificadores não tipados ('variante'). Também há inferência de tipo, um mecanismo em que a digitação estática é possível sem declarar explicitamente o tipo de tudo, fazendo com que o compilador descubra os tipos (Haskell usa isso extensivamente, o C # o expõe por meio da
var
palavra - chave).A programação dinâmica fraca permite uma abordagem pragmática; o idioma não fica no seu caminho a maior parte do tempo, mas também não entra em cena quando você leva um tiro no pé. A digitação estática forte, por outro lado, leva o programador a expressar determinadas expectativas sobre valores explicitamente no código, de uma maneira que permita ao compilador ou intérprete detectar uma classe de erros. Com um bom sistema de tipos, um programador pode definir exatamente o que pode ou não ser feito com relação a um valor e, por acidente, alguém tenta algo indesejado, o sistema de tipos geralmente pode impedi-lo e mostrar exatamente onde e por que as coisas dão errado.
fonte
&
para concatenação), operações como"12"+3
ou45 & "6"
não apresentam ambiguidade (elas calculam 15 e "456", respectivamente). Em uma linguagem de tipo mais forte, o operador "+" pode ser sobrecarregado com segurança para concatenação de strings e adição numérica sem causar ambiguidade, pois as operações em strings e números são proibidas. Os problemas surgem quando o idioma especifica as unhas, nem os tipos nem as operações a serem executadas.Digitação fraca é mais parecida com
1 == "TRUE"
. Esta seção na wikipedia ilustra bem a diferença.Observe que nenhum exemplo da wikipedia é estaticamente digitado, o que você se refere no seu segundo exemplo.
Portanto, se a pergunta é: por que as pessoas usam linguagens dinamicamente digitadas, a resposta é: sistemas de tipo estático impõem limitações a você. Muitas pessoas simplesmente nunca trabalharam com um sistema de tipo estático expressivo, o que os leva à conclusão de que as desvantagens da tipagem estática superam os benefícios.
fonte
Idiomas de tipos fracos ainda estão sendo desenvolvidos porque as pessoas os usam e gostam deles. Se você não gosta de digitação fraca, não use idiomas de digitação fraca. Declarar que algo é o único caminho verdadeiro e que todos devem fazê-lo O único caminho verdadeiro ignora a complexidade do mundo.
fonte
Não necessariamente. Objetivo de Aprendizagem-C: Uma cartilha aborda essa questão diretamente no contexto da Objetiva-C:
fonte