Preparando a migração para o VB.NET - uma visão Geral    


O que é o Visual Basic .NET ?   (Este artigo foi escrito em 2000/2001)

O VB.NET é a próxima versão do Visual Basic. E desta vez a Microsoft foi fundo. Mais do que acrescentar alguns recursos ao Visual Basic 6.0 a Microsoft reestruturou completamente o VB com o objetivo de tornar a tarefa de escrever e distribuir aplicações para a WEB ou para sistemas com n-camadas  muito mais fácil e simples.

O Visual Basic.NET vem com dois novos pacotes para formulários : Windows Forms e Web Forms; uma nova versão da ADO para acesso a fonte de dados desconectadas além de novas características que abrem novas portas para quem utiliza o Visual Basic como ferramenta de desenvolvimento. Com Web forms e ADO.NET pode-se desenvolver rapidamente sites escaláveis; com a incorporação da herança finalmente o VB se torna uma linguagem orientada a objetos. 

A versão oficial do Visual Basic.NET ainda não foi lançada. O produto ainda esta na sua versão Beta. O VB.NET vai abrir e atualizar as aplicações desenvolvidas com o Visual Basic 6.0 (tem até um assistente que lhe ajudará na migração) , mas mesmo assim , em muitos casos, será necessário realizar ajustes nos projetos antigos. Você fica com duas opções : ou faz a adaptação para a nova plataforma ou reescreve sua aplicação aproveitando os novos recursos disponíveis. (Os projetos feitos com o VB.NET não podem ser abertos no Visual Basic 6.0).

Ao abrir o seu projeto antigo e fazer a atualização , a linguagem é modificada para a nova sintaxe e os formulários do VB 6.0 são convertidos para Windows Forms.

Trabalhando em conjunto com o Visual Basic 6.0 e o Visual Basic.NET .

Se você possui qualquer projeto escrito nas versões 1.0 a 5.0 do Visual Basic , carregue o projeto usando o Visual Basic 6.0 (atualizando os controles ActiveX) , compile e salve o projeto antes de atualizar para a versão VB.NET.

O VB 6.0 e VB.NET podem ser instalados no mesmo computador e executados ao mesmo tempo; as aplicações escritas na versão 6.0 e na verão .NET podem ser instaladas e executadas também no mesmo computador.  Os componentes escritos na versão .NET podem interagir com os componentes COM escritos em versões anteriores do VB e de outras linguagens.

Recomendações

1-) Aplicações para Internet

2-) Projetos Cliente/Servidor

3-) Aplicações Desktop

4-) Atualização do código

Ao migrar o seu código para a versão .NET , o VB cria um novo projeto atualizado e realiza a maioria das alterações necessárias na linguagem e nos objetos para você. Vejamos alguns exemplos:

- Variant -> Object

No VB.NET um  novo tipo de dados substitui o tipo Variant , com o mesmo comportamento. É o tipo de dados Object.  Durante a migração do código todas as variáveis declaradas como Variant são alteradas Object.

- Integer -> Short

O tipo de dados Integer é alterado para Short . E o tipo de dados Long é alterado para Integer.

Dim x As Integer
dim y as Long

é atualizado para:

Dim x As Short
dim y as Integer

- Propriedades da Sintaxe com Get/Set

O VB.NET introduz uma sintaxe mais intuitiva para as propriedades com grupos Get e Set agora juntos:

Property Get MyProperty() As Integer
    m_MyProperty = MyProperty
End Property
Property Let MyProperty(NewValue As Integer)
    m_MyProperty = NewValue
End Property

é atualizado para:

Property MyProperty() As Short
    Get
        m_MyProperty = MyProperty
    End Get
    Set
        m_MyProperty = Value
    End Set    
End Property

- Formulários do VB para Formulários do Windows

O VB.NET tem um novo editor para formulários - Windows Forms - com suporte a acessibilidade e um editor. Os formulários das versões anteriores são atualizada para Windows Forms.

-  Relatório de atualização e comentários

Depois que um projeto é atualizado , um relatório de atualização é incluído em se projeto, descrevendo cada alteração que você precisa fazer para migrar o seu código. Além disto, comentários são adicionados ao código para alertá-lo sobre possíveis problemas.

Recomendações para programação

Veremos agora algumas recomendações sobre como escrever código para minimizar as alterações que serão necessárias em uma possível migração de seu projeto para a versão Visual Basic 7.0.

- Para armazenar datas use o tipo de dado Date

Nas versões anteriores você podia usar o tipo de dado Double para manipular datas. O VB.NET não suporta isto. Vejamos um exemplo

Dim dbl As Double
Dim dat As Date
dat = Now
dbl = dat     'Isto esta errado !!!!
dbl = DateAdd("d", 1, dbl)   'Errado !!
dat = CDate(dbl)   'Evite Isto.

- Utilização dos propriedades padrão dos objetos

No VB 6.0 muitos objetos expôe as propriedades padrão , e , podem ser omitidas no código. Assim TextBox tem Text como propriedade padrão , logo podemos fazer o seguinte:

MsgBox Form1.Text1.Text      pode ser escrito como      MsgBox Form1.Text1
Assim podemos também usar o seguinte código:
Dim obj As Object
Set obj = Form1.Text1
MsgBox obj   
O VB.NET não suporta a omissão dos parâmetros nas propriedades padrão. Veja exemplo a seguir:
Dim obj As Object
Set obj = Me.Text1
MsgBox obj   	      'ERRADO
MsgBox Me.Text1   'ERRADO

prefira usar o código abaixo

Dim obj As Object
Set obj = Me.Text1
MsgBox obj.Text  		'CORRETO
MsgBox Me.Text1.Text    	'CORRETO
- Comparações Boleanas com AND/OR/NOT
O VB.NET possui um novo conjunto de operadores para realizar operações Lógicas com BIT. 
São  eles : BitAnd , BitOr , BitNot e BitXor. Os operadores AND , OR e NOT realizam somente operações lógicas.  Para permitir a compatibilidade esteja certo ao usar AND , OR e NOT somente para comparações Booleanas.

Por questões de compatibilidade o VB.NET inclui as funções VB6.And , VB6.Or e VB6.Not que avaliam os operadores AND , OR e NOT da mesma forma que o VB6. Veja o exemplo a seguir:
 
 
Dim a As Integer
Dim b As Integer
Dim c As Boolean
a = 1
b = 2
c = a And b
MsgBox ("A reposta é " & c)										
Dim a As Short
Dim b As Short
Dim c As Boolean
a = 1
b = 2
c = VB6.And(a, b)
MsgBox ("A reposta é" & c)					
Visual Basic 6.0 - Resultado : False

Visual Basic 7.0 - Resultado : True

Usando a função de compatibilidade VB6.And para obter o mesmo resultado.
 
 
Um melhor tratamento seria: 
Dim a As Integer
Dim b As Integer
Dim c As Boolean
a = 1
b = 2
c = a <> 0 And b <> 0
MsgBox ("A reposta é " & c)

Após a migração o código será mais familiar:

Dim a As Short
Dim b As Short
Dim c As Boolean
a = 1
b = 2
c = a <> 0 And b <> 0
MsgBox ("A reposta é " & c)

- Evite usar a propagação do Null

As versões anteriores do VB permitem a propagação do Null.

Esta propagação é baseada na premissa que quando Null é usado em uma expressão o resultado da expressão será Null.

Assim temos que no código abaixo o resultado de V será Null:

Dim V
V = 1 + Null
V = Null + Right$("SomeText", 1)
V = Right("SomeText", 0)

O VB.NET não suporta a propagação do Null. Assim Null +1 irá gerar um erro de incompatibilidade de tipos (Type Mismatch ) no VB.NET.

Assim o VB 6.0 possui duas versões para a função Left : Left$ - retorna uma string e Left - retorna uma variant que pode ser um Null.

O VB.NET possui somente uma versão para Left a qual retorna sempre uma string.  No VB.NET as seguintes funções não retornam mais um Null:

Chr Mid
Command Oct
CurDir Right
Date RTrim
Environ Space
Error Str
Hex Time
LCase Trim
LTrim UCase

- Use vetores com índice inicial zero e evite usar REDIM

No VB.NET os vetores tem como índice inicial o valor zero e não permitem o uso de REDIM para variaveis array , a menos que a variável tenha sido previamente declarada usando o DIM.  Assim temos:

Dim a(1 To 10) As Integer   		'ERRADO: LBound DEVE SER  0
Dim v
ReDim v(10)   			            'ERRADO: USOU ReDim SEM Dim
 Dim b(10) As Integer   		'CORRETO:  Cria um vetor com 10 inteiros
ReDim b(5) As Integer   		'CORRETO: USOU ReDim com um  Dim anterior

- Procure usar as constantes aos invés de seus valores

Me.WindowState = vbMaximized   'CORRETO
é bem melhor que:
Me.WindowStyle = 2   'ERRADO
Me.WindowStyle = X   'ERRADO

E prefira usar  True e False ao invés de  -1 e  0.

- Evite usar as seguintes palavras chaves

As palavras chaves a seguir foram removidas na versão .NET

  • Def<type>

  • Computed GoTo/GoSub

  • GoSub/Return

  • Option Base 0|1

  • VarPtr, ObjPtr, StrPtr

  • LSet

- O que mudou na utilização das APIs

Muitas APIs podem ser usadas exatamente como na versão 6.0 , com pequenos ajustes nos tipos de dados. (Lembre que o tipo Long agora é Integer e que Integer agora é Short).

Durante a migração as mudanças devem ser feitas por você. Exemplo:

Private Declare Function GetVersion Lib "kernel32" () As Long
Function GetVer()
    Dim Ver As Long
    Ver = GetVersion()
    MsgBox ("System Version is " & Ver)
End Function

Muda para:

Private Declare Function GetVersion Lib "kernel32" () As Integer        
Function GetVer()
    Dim Ver As Integer
    Ver = GetVersion()
    MsgBox("System Version is " & Ver)
End Function

Já no seguinte código  temos:

Private Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Long) As Long
Function GetUser()
    Dim Ret As Long
    Dim UserName As String
    Dim Buffer As String * 25
    Ret = GetUserName(Buffer, 25)
    UserName = Left$(Buffer, InStr(Buffer, Chr(0)) - 1)
    MsgBox (UserName)
End Function

é atualizado para :

Declare Function GetUserName Lib "advapi32.dll" Alias _ 
"GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer
Function GetUser()
    Dim Ret As Integer
    Dim UserName As String
    Dim Buffer As String
    Buffer = New String(CChar(" "), 25)
    Ret = GetUserName(Buffer, 25)
    UserName = Left(Buffer, InStr(Buffer, Chr(0)) - 1)
    MsgBox(UserName)
End Function

- Controles e formulários

A versão .NET traz como novidade o Windows Forms que embora seja compatível com os antigos formulários traz as seguintes diferenças:

Bem , depois desta teoria toda , espero que 2001 seja melhor que 2000 para todos.

Com certeza teremos muitas novidades com a chegada da versão 7.0 do VB.

E vou ficando por aqui ...

Até 2001

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti