msdn11_capa.jpg

Clique aqui para ler todos os artigos desta edição

 

Ferramenta para Tradução de C# para Visual Basic

por John Robbins

 

Após ter conversado com milhares de desenvolvedores que usam o Microsoft .NET Framework, a reclamação que mais ouvi foi: "Meu maior desejo é que todas as amostras de código fossem escritas em minha própria linguagem de programação". Nada é mais frustrante do que navegar horas na Internet em busca de um fragmento de código que faz exatamente o que você quer, mas que foi escrito em uma linguagem que você não usa.

A boa nova é que você pode converter o código para sua linguagem favorita sem grandes alardes. Certamente, não quero me envolver em nenhuma guerra entre as linguagens, mas no caso do .NET, as duas linguagens usadas com mais freqüência são o Visual Basic .NET e o C#, por isso me concentrarei apenas na conversão delas.

Como o .NET Framework forma a base da vida, a maior parte do processo de conversão é fácil (só há uma maneira de chamar um método como o Debug.Assert). O resto da conversão do código em torno das chamadas de método do Framework envolve a conversão de um conjunto de sintaxes para outro. Como tanto o Visual Basic .NET como o C# mostram os erros de sintaxe rabiscadas, eu jogo pequenas amostras no editor e uso esses erros para me guiar durante a conversão. Quanto mais familiarizado você estiver com as linguagens, mais fácil será o processo.

Inicialmente, eu pensei que poderia utilizar algumas expressões regulares que já havia experimentado e tentar reuni-las juntas. Após alguns minutos de rascunho, comecei rapidamente a escrever um mecanismo de parse totalmente completo. Como não era isso o que eu queria, recorri ao recurso de todo desenvolvedor preguiçoso, o Google, e procurei ver se alguém já havia tido esse trabalho por mim. A boa notícia é que encontrei três excelentes recursos.

O primeiro deles é o utilitário de conversão de C# to Visual Basic .NET (http://www.4guysfromrolla.com/webtech/012702-1.shtml) de Kamel Patel. Kamel tem um aplicativo ASP.NET que faz a conversão, mas você pode baixar o código do mecanismo de parse e executá-lo localmente como se fosse um aplicativo Windows Forms. Embora existam alguns bugs na conversão, o mecanismo de parse de Kamel é relativamente simples de entender e deve ser fácil de consertar.

O próximo site foi o C# to VB.NET Translator (http://www.kamalpatel.net/ConvertCSharp2VB.aspx), de Alex Lowe. Apesar de Alex não disponibilizar o código, seu mecanismo de tradução faz um trabalho muito bom. As instruções #region em C # não são traduzidas, mas os comentários são posicionados no código, indicando onde estava a diretiva do pré-processador, para que você possa sempre retornar rapidamente e incluí-los no código. A página de Alex menciona a interface de Web Service para o mecanismo de conversão. Infelizmente, ele sempre reporta um erro de parse após algumas linhas do código, por isso eu não o colocaria para funcionar, mas provavelmente Alex já terá se livrado dos bugs quando você ler este artigo.

Se você quiser um ótimo exemplo de um grande aplicativo baseado em .NET, com uma implementação de arquitetura robusta, dê uma olhada no código #develop (http://www.icsharpcode.net/OpenSource/SD/). No momento em que escrevo este artigo, o #develop está na versão Beta 1, o que significa que o utilitário de tradução de código ainda não contém todos os recursos e não trata diretivas e comentários no pré-processador. A equipe está trabalhando fervorosamente na versão 1.0 e planeja adicionar muito em breve esses dois componentes que faltam.

Todas essas soluções de tradução são ótimas para converter pequenas amostras de código-fonte, mas o verdadeiro problema é que muitas vezes você precisa converter um projeto de muitos arquivos. Como eu mesmo já precisei muitas vezes fazer isso, escrevi uma ferramenta, CSProjToVBProj, que pega um arquivo CSPROJ em C# e converte todo o projeto (incluindo o código-fonte) em um arquivo VBPROJ, que você pode imediatamente abrir e compilar.

O uso do CSProjToVBProj é bastante objetivo, mas a implementação é interessante. Por motivos que ignoro, os projetos em C# e Visual Basic .NET são diferentes o suficiente para serem maçantes, o que demanda muito trabalho duro envolvido. Por exemplo, no C# todas as instruções using estão no código, então é totalmente óbvio quais namespaces o desenvolvedor está esperando. No Visual Basic .NET, a maioria das instruções Import estão no elemento dentro do arquivo de projeto propriamente dito.

Outra atitude lógica que precisei tomar foi certificar-me de atualizar apropriadamente os Web files com uma referência de codebehind explícita para procurar pelo arquivo .vb (em vez de pelo arquivo .cs). Para a versão 1.0 do CSProjToVBProj, estou usando o mecanismo de tradução #develop para fazer a tradução do código-fonte, por isso, você precisará baixar e criar o #develop primeiro. O arquivo !READMEFIRST!.TXT do projeto descreve as etapas exatas para criar o CSProjToVBProj.

Se você estiver em busca de um desafio na codificação, considere escrever um utilitário VBProjToCSProj, para que possamos todos alternar entre as linguagens de projetos em de acordo com nosso desejo.

 

Download disponível em www.neoficio.com.br/msdn