domingo, 7 de setembro de 2008

Strong typing com jeito de weak typing no C#




Pegando o gancho no último post sobre Javascript:

Acredito que o leitor deve ter percebido que uma coisa que pessoalmente não me agrada (com raríssimas exceções em casos específicos) são linguagens de programação que encorajam que seus tipos sejam "weakly typed"(fracamente tipados) .

A bem da verdade, produzir scripts que necessitam ligar um aplicativo, passar parâmetros de datas pra lá e pra cá, tarefas que realmente não necessitam propriamente de uma linguagem de programação robusta, basicamente uma linguagem dinâmica de script é o suficiente.

Agora quando você necessita de uma linguagem que, além de ser facilmente legível e ágil como as linguagens dinâmicas, mas que permita um encadeamento lógico necessário para se construir blocos de código estruturais, internos aos aplicativos, onde processo de construção necessita de uma abordagem diferenciada. Aí não há como dizer que tipagem forte não representa a opção mais sensata.

Alguns argumentos em favor disso:
  • A gerência da memória de dados é simplificada, afinal, quem define os tipos é o programador (não estou contando com reflection). Geralmente numa linguagem dinâmica, o tipo muda de acordo com o valor da variável, e é necessária uma estrutura extra pra cuidar desse processo.
  • Os recursos de intelisense ficam simplificados na implementação e 100% precisos, nada de “sugestões”. O javascript e outras linguagens sofrem bastante com esse problema.
  • Aumenta a facilidade de leitura, pois você já consegue identificar o tipo pela declaração.
  • A tipagem forte permite a você garantir que problemas inerentes ao tipo (conversões, chamadas de métodos, etc) não serão passados para a versão final do programa, uma vez que esse modelo também é efetivo contra a filtragem de erros e tempo de compilação/verificação de sintaxe.

No C# 3.0 conseguiu-se um meio termo muito interessante entre os principais argumentos de quem tem preferência por tipagem fraca (principalmente referidas a escrita) mas mantendo a solidez do modelo fortemente tipado.

Type Inference (Inferência de Tipo)

Observe:


Uma novidade no C# é a nova sintaxe para deixar que o compilador infira para você o tipo do objeto, com a palavra reservada var.

Na prática, o compilador (e o intelisense também) inferem que você inicializou o objeto com o tipo int, então o tipo daquela referência é int.

Datalhe: se você for querer passar para a variável, após o momento da inicialização algum valor que não seja do tipo inferido, ocorre um erro de compilação.



Type Inference + Anonymous Types

Mas se tem alguem ainda insatisfeito porque adoram o jeito "JSON" de programar das linguagens dinâmicas, saibam que o C# incorporou na sua versão 3.0 uma forma bastante interessante de declaração de dados:




O tipo é anônimo, mas é um tipo forte,o intelisense mostra isso: podemos acessar as variáveis internas do tipo anônimo sem delongas.

Conclusão

Embora uma implementação de linguagens com tipagem fraca careçam de alguns elementos importantes para o processo de desenvolvimento de software básico, existem princípios que podem ser bem aproveitados em linguagens como C# a fim de torná-la uma linguagem completa sem aumento de complexidade.

Nenhum comentário: