sábado, 29 de agosto de 2009

Prefiro C# do que VB.Net - Parte 1


Introdução

Vou começar escrevendo no blog algumas razões de preferir o C# ao invés do VB.Net ao desenvolver uma aplicação. Deixo claro que isso é uma comparação de sintaxe da linguagem e sintaxe cada um tem sua preferência, por isso vou explicar o porquê de eu preferir o C#.

O Visual Basic.Net tem uma sintaxe simples e ainda vem por padrão com o Option Strict Off, esses dois fatores combinado ainda com o Visual Studio torna o VB.Net uma linguagem muito fácil de se programar. É realmente uma maravilha para os iniciantes e isso é um grande mérito da linguagem.

Mas há pontos na sintaxe que você pode se meter em incríveis confusões. Parece até um filme de sessão da tarde não é mesmo? Vamos ver onde estão essas tais confusões e como podemos tentar evitá-las tornando o código mais “profissional” possível.

Falando em deixar o código mais “profissional” é isso que o C# normalmente te obriga, e muitas das confusões no VB.Net podem ser resolvidas com o Option Strict On que evita uma série de erros, deixando seu código mais bonito e rápido, acredite vale a pena ligar o amiguinho.

A sintaxe do VB.Net pode deixar você confuso e quebra até conceitos de orientação a objetos, vou explicar mais abaixo.

Construtor Padrão Fora do Padrão

Quando você cria o “Form1” pelo Visual Studio, você está criando uma classe, Ok? Essa classe descende da classe System.Windows.Forms.Form e está divida em duas partes, uma fica o código do Design(no arquivo Form1.Designer.vb) gerado normalmente pela ferramenta que tem o método InitializeComponent e a outra a sua implementação(no arquivo Form1.vb).

O método InitializeComponent é quem inicializa todos seus componentes, se ele não for executado nada vai aparecer na tela, mas onde ele é chamado? Resposta: No construtor que fica escondido.
Isso é confuso, pois você não vai encontrar a chamada do método a não ser que você implemente um construtor, então basta escrever a assinatura do construtor e dar um enter para o Visual Studio preencher o conteúdo que estava oculto para você.

Public Sub New()
        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.
End Sub

Só para deixa claro, toda classe tem um construtor, e quando você não implementa ele fica com o construtor padrão que por sua vez não tem nenhuma instrução dentro dele. Mas no VB.Net qualquer form que você crie, o construtor padrão não é mais padrão.

Parece Shared Mas Não é Shared

Ainda falando sobre os forms do VB.Net, como você executa o método Show no seu “Form1”?

Um form é uma classe, e caso você queira usar um método dessa classe, você precisa criar uma instancia do form, a não ser que o método do form seja Shared(static em C#, Java...) certo?

Bem, no VB.Net você consegue chamar um método que não é shared sem instanciar um objeto, isso vale apenas para as classes que descendem da classe Form, ou seja, todos os formulários que você cria.
O VB.Net deixa você chamar qualquer método da classe "Form1" sem necessidade de instanciar por questões de retrocompatibilidade com o VB6:

Form1.Show()

O correto seria:

Dim frm As New Form1()
frm.Show()

No primeiro caso é criado automaticamente uma instancia do "Form1" e depois é executado o método Show, más você não fica com a referencia dessa instancia como é no segundo caso onde está armazenada a referencia na variável 'frm' e você tem um controle total daquela instancia e pode até criar várias instancias de um único form.

Chegando ao Fim da Parte 1

Quando comecei a aprender orientação a objetos fiquei confuso nos dois casos acima. Não fiz nenhuma comparação direta com o C# porque simplesmente não acontece isso nele. Há mais casos ainda que irei abordar nos próximos posts e se você não sabe o que o Option Strict faz e nem sabe sobre métodos shared e construtores fique tranqüilo que irei abordar nos próximos posts também.

Até a próxima,
Tiago Esmeraldino