sábado, 2 de junho de 2007

VB.Net vs C#.Net

Para a estréia do blog, resolvi falar de um assunto, mas ameno, diferente do que pode parecer pelo titulo, não vou tentar aqui provar que uma linguagem e melhor que a outra, mas sim tentar apontar as diferenças de sintaxe, no intuito de mostrar as equivalências para ajudar em uma migração. Não vou me apegar a alguns detalhes, já que o artigo será voltado para quem já conhece alguma coisa de pelo menos uma das linguagens.

Todo programador .Net tem que conhecer bem o .Net Framework, partindo deste principio, deveria ser uma opção de cada programador a escolha da linguagem que mas lhe agrada, eu por exemplo, vocês vão acabar notando com as matérias que estão por vir, que prefiro VB.Net por uma questão puramente de gosto por já ter vindo de outras linguagens também baciadas em basic.Mas a verdade e que existe uma forte pressão do mercado por ambas as linguagens o que nos obriga a conhecer pelo menos as duas principais linguagens do universo .Net que são VB.Net e C#.Net.

Muita coisa se fala, sobre a superioridade de uma sobre a outra, o que e uma coisa sem propósito. Ai você vai me perguntar, mas então por que C#.Net aparentemente tem mais demanda que VB.Net, a questão é que para muitos programadores, a migração para o C#.Net e muito mas fácil por serem programadores de C/C++ e Java, principalmente nos USA onde estas linguagens sempre foram muito populares o que também gera um volume de documentação muito maior, tornando o aprendizado da linguagem mais fácil por ter mais material disponível.E existe um pouco de preconceito por parte de alguns que acham o C#.Net mas profissional, isto por que o VB.Net e uma linguagem com sintaxe baseada em basic que foi uma linguagem feita para não programadores,tanto que um programa escrito em linguagens basic praticamente são textos em inglês estruturado.Mas confundir simplicidade com fragilidade e no mínimo ingênuo.

Se no Desktop existe muito demanda por C#.NET na WEB o VB.Net leva alguma vantagem, isto não quer dizer que VB.Net seja melhor na WEB que o C#.Net, mas se no desktop existem muitos programas escritos em C/C++ e Java, na WEB a maior demanda inicial de ASP.Net foi para migrar paginas ASP escritas em VBScript, o que prova que a plataforma já estalada influencia muito na decisão do mercado por esta ou aquela linguagem.

Vou listar agora as principais diferenças de sintaxe entre elas.

Declaração de variáveis

Talvez a diferença mais significativa entre elas e que C#.Net faz distinção entre maiúsculas e minúsculas e o VB.Net não, então muito cuidado com isto, MyVariavel e diferente de Myvariavel que também e diferente de myvariavel e assim por diante, em C#.Net elas seriam variáveis diferentes, fora isto basicamente a maior diferença na declaração das variáveis entre as duas são os nomes dos tipos, e o fato de que em C#.NET primeiro você informa o tipo e depois o nome, e no VB.Net se determina o nome da variável e depois o seu tipo.

Exemplo de uma declaração de uma variável privada do tipo inteira.

VB.Net

C#.Net

Private Variavel As Integer

private int variavel;

Operadores Lógicos e Relacionais

A baixo segue uma lista dos principais operadores lógicos das linguagens.

Tabela de Operadores Lógicos.

VB.Net

C#.Net

Significado

=

==

Igualdade

Not

!

Negação

<>

!=

Diferente

Or

Ou

Xor

^

Ou Exclusivo

And

&

Conjunção

AndAlso

&&

Conjunção(Esta opção sai da expressão quando tiver o primeiro resultado falso)

<

<

Menor que

>

>

Maior que

Estrutura

Em VB.Net os blocos de comando quase sempre são limitados pelo nome do comando que inicia o bloco seguido da expressão booleana nos comandos de decisão, e o nome do mesmo comando precedido de um End indicando o fim do bloco, no C#.Net você ira por o nome do comando e no caso de estruturas de decisão as expressões booleanas serão colocadas entre parênteses e assim você ira abrir o bloco com o uma chave e fechara o bloco com o outra chave seguida de um ponto e virgula

Exemplo laço while com um if

VB.Net

C#.Net

While Variavel = 1

If Variavel = 1 Then

Variavel = 2

End If

End While

while (variavel == 1)

{

if (variavel == 1)

{

variavel = 2;

};

};

Orientação Objeto

As diferenças de sintaxe ficam muito mais evidentes entre VB.Net e C#.Net, com relação as declarações de métodos propriedades,overrides e overloads e herança interfaces etc.... Dariam um outro artigo inteiro, então vou só falar dos construtores que e o inicio de tudo e deixar o restante para uma próxima matéria retomando a este assunto. Uma classe em VB.Net e declarada com o a palavra reservado Class seguido do nome da classe, e termina no End Class, o construtor de uma classe em VB.Net sempre será uma procedure Sub New que poderá ter ou não parâmetros de acordo com o que for definido pelo programador.Em C#.Net uma classe e declarada com a palavra reservada class seguida do nome da classe, que tem o seu código limitado entre as chaves mas externa, o construtor de uma classe C#.Net sempre será uma procedure com o mesmo nome da classe que também terá ou não argumentos conforme o projeto.

Exemplo de Classes

VB.Net

C#.Net

Public Class Mensagem

Private _Msg As String

Public Sub New()

Me.Msg = "Alou Mundo"

End Sub

Property Msg() As String

Get

Return _Msg

End Get

Set(ByVal value As String)

_Msg = value

End Set

End Property

End Class

using System;

using System.Collections.Generic;

using System.Text;

//Esta linha do sera diferente deacordo com o seu projeto

namespace WindowsApplication2

{

class Mensagem

{

private string _msg;

public Mensagem()

{

this.msg="Alou Mundo";

}

Public string msg

{

get{return _msg;}

set{_msg=value;}

}

}

}

A prova

Bem para provar que realmente VB.Net e C#.Net se tornam a mesma coisa, iremos usar um aplicativo que vem com o próprio Visual Studio.Mas antes uma rápida visão sobre a arquitetura, para os que não sabem os aplicativos .Net na verdade eles não são feitos na linguagem em que você programa a grande sacada da microsoft para criar uma plataforma multe linguagem foi criar uma linguagem intermédia a MSIL (Microsoft Intermediate Language) a popular IL,Então a groso modo funciona assim, você escreve o seu programa em uma das varias linguagens da plataforma .Net, o compilador da linguagem que você escolheu vai compilar o IL do seu programa, e quando o seu programa rodar o JIT (Just in Time) vai entrar em ação, compilando o IL no assembly final do seu código.Portando se o IL das linguagens são iguais o resultado final também será independente da linguagem escolhida.

Agora vamos dar uma olhada no IL, crie um projeto Windows Application em VB.Net, adicione uma nova classe e copie e cole o exemplo de classe que foi dado acima.

De um duplo click no form e no evento form load digite o seguinte código

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim objMsg As New Mensagem

MessageBox.Show(objMsg.Msg)

End Sub

Agora crie um projeto Windows Application C#.Net e adicione uma classe a ele também, e copie e cole o código de exemplo de classe C#.Net, e de um duplo click no forme e digite este código.

private void Form1_Load(object sender, EventArgs e)

{

Mensagen ObjMsg=new Mensagem();

MessageBox.Show(ObjMsg.msg);

}

Pronto feito isto compile seus aplicativos, depois de compilados você pode ir até o menu do windows, na pasta onde esta o Visual Studio, deve ter uma opção Visual Studio Tools , dentro desta opção terá ainda Visual Studio Command Prompt, click nela e será aberta uma janela do timo terminal.Digite então o seguinte comando

ildasm c:\myAppVB.exe /html

Digite enter, claro trocando o nome e o caminho do aplicativo pelo nome que você tiver dado e o caminho onde ele estar em sua maquina.Se abrira então uma janela onde você poderá navegar pelo IL da sua aplicação. Faça o mesmo com o aplicativo C#.Net.

Nas Janelas que se abriram, uma das seções deve ter o nome que você deu ao seu aplicativo seguido pelo nome da classe mensagem, em cada uma delas, click no sinal de mais e de duplo click em cada um dos atributos e você verá o IL da classe mensagem, e percebera que são iguais nos dois aplicativos.

Cada uma das seções que estão nesta janela e uma parte do seu aplicativo, no caso do form você ira ver que os ILs são diferentes, mas isto se deve ao fato das equipes de programação do VB.Net e do C#.Net terem feito códigos diferentes para os forms, se você der uma olhada nas partitions classes dos forms poderar ver as diferenças nas declarações dos objetos.Mas a nossa classe que tivemos o cuidado de fazer igual nas duas linguagens o IL e idêntico.

Bem, Este artigo fica por aqui, prometo em prevê voltar com este assunto, e cobrir as partes das declarações de atributos e modificadores de acesso dos métodos.

E até mais.

Nenhum comentário: