Vamos falar sobre - Tipagem
Olá a todos, sigo com esse projeto de trazer meus estudos aqui e compartilhar com os novatos como eu para evoluirmos juntos!
Quando falamos de tipagem estamos falando do sistema de TIPOS adotados nessa linguagem, com a modernização de linguagens e novas linguagens esse termo anda mais flexível, visto de modo que não há um consenso universal sobre esse assunto, mas sim consensos de hábitos ruins e comparações dos TIPOS entre as linguagens.
Começando do básico vou listar alguns TIPOS básicos essênciais em C# para exemplificar:
Tipo Estático
int NúmeroInteiro = 5;
float NúmeroNãoInteiro = 3.14f;
bool ValorBooleano = true;
string Texto = "hello World!";
NúmeroInteiro = "Hello World!";
/* Não é possível converter um TIPO int em TIPO string */
Uma variável de tipo estático não pode mudar seu tipo.
Tipo Dinâmico
dynamic QualquerVariável = 5;
QualquerVariável = "Hello World!";
Uma variável de tipo dinâmico pode mudar seu tipo.
Mas se c# suporta tipagem dinâmica, por quê eu perderia tempo definindo o tipo da variável?
Existem algumas razões do porque não é uma boa ideia utilizar tipagem dinâmica comumente pelo menos nessa linguagem, primeiro vamos pensar na legibilidade do código, se todas as suas variavéis podem mudar de valor a qualquer momento, como seria feita a manutenção do código? Uma simples conta em float transformada em int poderia quebrar todo o programa.
Outra questão também é o desempenho, ao compilar o tipo dinâmico, a informação do tipo da variável tem que ser buscada a todo instante, pois ela pode mudar ao decorrer da execução, escondendo assim algumas quebras de códigos que poderiam ser relatadas antes mesmo de executar.
Comparação
Tipagem estática | Tipagem dinâmica |
---|---|
Descobre erros antes | Descobre erros no último momento |
O código costuma ser mais legível. Os tipos aparecem no código ou o IDE consegue mostrar | O programador precisa entender e documentar o código para saber os tipos e nunca é garantido |
Fornece melhor semântica para o código | A tipagem funciona mais como um mecanismo |
Fornece melhor perfoemance na maioria dos casos | A performance é inferior |
Segurança | Concisão |
Qualquer alteração no problema exige mudança no código | Alteraçõ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 fixas | Regras variam com o estado do objeto |
Facilita a formalização | Facilita o experimento |
Rigidez | Flexibilidade |
Mais difícil de aprender e usar | Mais difícil de manutenção |
Reduz a necessidade de testes | Exige testes em cima dos tipos |
Reutilização de código é mais complicada | Reutilização de código é mais arriscada |
Metaprogramação é complicada | Metaprogramação é mais fácil |
Facilita grandes programas | Facilita pequenos programas |
Conclusão
Como eu disse, não existe um consenso global sobre esse assunto e tudo depende da situação que cada uma será usada, existe muitos termos mais profundos nesse assunto ainda, mas até agora foi o que eu pude aprender.
Se o uso de determinada tipagem pode facilitar a compilação do seu programa então cabe a você decidir qual delas vai usar.
Sintam-se livres para corrigir se eu errei alguma coisa!