Novidades na linguagem C#
Uma das grandes vantagens de a linguagem C# não ser um padrão proprietário de ninguém – nem da Microsoft - é que ela pode ser alterada por qualquer um de acordo com as suas necessidades, incorporando o que há de mais novo em tecnologia de programação.
Evidentemente, a própria Microsoft está criando novidades que serão disponibilizadas na próxima versão do Visual Studio, o Whidbey, a ser lançado em 2005.
Muitas dessas novidades já são conhecidas há algum tempo, tendo sido inicialmente desenvolvidas pela Microsoft Research em Cambridge, Reino Unido (confira aqui). Mais recentemente, a Microsoft publicou um “roadmap” sobre o Visual Studio .NET, detalhando tanto seus planos futuros para o Visual Studio .NET como para as diversas linguagens de programação disponíveis. Vejamos o que o C# terá de novo.
A principal novidade é, sem dúvida, o suporte a “Generics”. Os “Generics”, também conhecidos como “tipos parametrizados”, são ideais para criar coleções e outras classes “container”. A vantagem de coleções baseadas em Generics ao invés de coleções “comuns” é que elas são “tipadas”, impedindo que você adicione um tipo errado, em tempo de compilação. Também não é necessário “cast” na hora de retirar elementos da coleção. Outra vantagem é a performance: no caso de tipos por valor, como inteiros, não é necessário fazer “boxing” e “unboxing”, permitindo um código mais rápido e que use menos memória.
Os Generics lembram bastante os “templates” do C++, a diferença é que templates do C++ são essencialmente “super macros”, resolvidos em tempo de compilação, ao passo que no C# seu mecanismo é mais sofisticado e exigiu mudanças no CLR: o código das classes que usam Generics é criado em tempo de execução, no momento em que a classe é instanciada!
Outra novidade são os “tipos parciais”. Você pode definir uma classe em dois arquivos fontes separados. Esse recurso é usado pelo próprio Visual Studio .NET para separar as classes associadas a componentes e formulários em geral: o código criado pelo Visual Studio é colocado em um fonte e o código que você escreve fica em outro fonte, diminuindo a possibilidade de interferências entre os dois durante o desenvolvimento. Depois de compilada, a classe funciona como se tivesse sido declarada em um único arquivo, como ocorre hoje. Na versão atual, é bastante trabalhoso criar um tipo que possa participar de um loop “foreach”. Os “iterators” tornarão esta tarefa bem mais simples. Os “métodos anônimos” permitirão que um bloco de código seja associado a um evento sem que seja necessário declarar o cabeçalho do método, o que simplifica a programação.
Finalmente, o próprio ambiente do Visual Studio .NET traz muitas inovações. Algumas podem ser vistas no editor de texto, como a inserção de expressões comuns como loops e blocos try/catch. Também o “intellisense” está mais esperto, limitando os tipos de expressões mostrados conforme o contexto (por exemplo, em uma expressão catch só serão exibidos os tipos derivados de Exception). Existem inúmeras opções para formatar automaticamente o código, de acordo com praticamente qualquer gosto.
A novidade mais interessante no editor de textos é o suporte a “refactoring”. Refactoring significa um conjunto de operações feitas pelo editor sobre o seu código-fonte, aplicadas inteligentemente e com conhecimento da linguagem. Algumas delas: renomear métodos, envolver campos em propriedades, extrair um bloco de código como um novo método, extrair interface de uma classe e alterar parâmetros de várias maneiras (reordenando, renomeando, acrescentando e removendo).
Abordei aqui apenas as novidades do Visual Studio .NET que afetam diretamente a linguagem C#, mas existem muitas outras. Os assinantes MSDN Universal já podem efetuar download de uma versão “alfa” do Visual Studio .NET “Whidbey”, denominada “VS 2005 Community Preview”.
Quando a Microsoft lançou a linguagem C#, muitas pessoas tiveram uma reação fria, perguntando se era realmente necessária “mais uma linguagem de programação”. As novidades no C# provam que sim, pois assim como há evolução no hardware, existe evolução em outros aspectos da informática. Achar que uma única linguagem controlada por “déspotas esclarecidos” resolverá todos os problemas, de todo mundo, é muita ingenuidade. O melhor é permitir que os pesquisadores continuem a inventar novidades e deixar que o mercado decida o que é melhor.