Desenvolvimento - Visual Basic .NET
Algumas coisas legais do Visual Basic .Net 9.0 - 2008
Vem ai mais uma versão do Visual Basic! Junto com a nova versão do Framework, a versão 3.5 temos algumas implementações interessantes em uma das linguagens mais utilizadas do mundo..
por Alexandre TarifaVem ai mais uma versão do Visual Basic! Junto com a nova versão do Framework, a versão 3.5 temos algumas implementações interessantes em uma das linguagens mais utilizadas do mundo.
Um pouco de história
O Visual Basic foi totalmente refeito com o lançamento da plataforma .Net, e desde então continuou evoluindo junto com o Framework. Atrelado a versão 1.1 do Framework tínhamos o VB 7, e com a versão 2.0 ou VB 8 ou Visual Basic 2005.
A evolução do Framework é significativa, já que em 2002 tivemos o lançamento da versão 1.0 e apenas 5 anos depois já estamos na versão 3.5.
Veja a tabela desta evolução:
|
2002 |
2003 |
2005 |
2006 |
2008 |
Visual Studio |
VS 2002 |
VS 2003 |
VS 2005 |
VS 2005 + Add In |
VS 2008 beta |
Linguagens |
VB 7.0 C# 1.0 |
VB 7.1 C# 1.1 |
VB 8.0 C# 2.0 |
VB 8.0 |
VB 9.0 |
Framework |
1.0 |
1.1 |
2.0 |
3.0 |
3.5 |
CLR |
1.0 |
1.1 |
2.0 |
2.0 |
2.0 |
Podemos acompanhar também a evolução
da linguagem depois da Plataforma .Net:
Acompanhando as discussões em blogs do time de VB (http://blogs.msdn.com/vbteam) podemos reparar nos seguintes objetivos:
· Simplificar ainda mais o código;
· Não ignorar as versões anteriores;
· Tornar a linguagem funcional e extensível;
· Não revolucionar nada.
Inicializadores de Objetos
A inicialização de objetos esta presente há muito tempo na linguagem, e parece ser algo inofensivo, algo totalmente sem segredo... se analisarmos um código muito simples, realmente isso é verdade!
Dim cli As New Cliente
Como disse, sem segredo algum... mas vamos dar uma olhada em um código onde configuramos a propriedade de alguns clientes e adicionando em uma lista de clientes:
Dim lista As New List(Of Cliente)
Dim cli1 As New Cliente
cli1.Nome = "Cliente 1"
cli1.Idade = 28
lista.Add(cli1)
Dim cli2 As New Cliente
cli2.Nome = "Cliente 2"
cli2.Idade = 28
lista.Add(cli2)
Dim cli3 As New Cliente
cli3.Nome = "Cliente 3"
cli3.Idade = 28
lista.Add(cli3)
Dim cli4 As New Cliente
cli4.Nome = "Cliente 4"
cli4.Idade = 28
lista.Add(cli4)
Dim cli5 As New Cliente
cli5.Nome = "Cliente 5"
cli5.Idade = 28
lista.Add(cli5)
A idéia dos inicializadores de objetos, é através do With (não é o velho With J ) fazer a inicialização de objetos.
Dim cli As New Cliente With {.Nome = "Cliente 1", .Idade = 10}
Neste caso então, o With na seqüência da instância do objeto já disponibiliza as propriedades e já é possível passar os valores.
Se compilarmos o código e decompilar o código, veja o que ocorre (utilizando o reflector - http://www.aisto.com/roeder/dotnet)
Dim VB$t_ref$S0 As New Cliente VB$t_ref$S0.Nome = "Cliente 1" VB$t_ref$S0.Idade = 10
Veja que o compilador criou uma variável com um nome estranho e atribuiu os valores da mesma forma que fizemos anteriormente. Ou seja, o código gerado após compilar é idêntico ao que criamos.
O código completo ficaria assim:
Dim lista As New List(Of Cliente)
lista.Add(New Cliente With {.Nome = "Cliente 1", .Idade = 10})
lista.Add(New Cliente With {.Nome = "Cliente 2", .Idade = 20})
lista.Add(New Cliente With {.Nome = "Cliente 3", .Idade = 30})
lista.Add(New Cliente With {.Nome = "Cliente 4", .Idade = 12})
lista.Add(New Cliente With {.Nome = "Cliente 5", .Idade = 14})
Inferência de tipos
As linguagens .Net são fortemente
tipadas... isso já é fato desde a versão 1.0 do framework. Porém agora, também temos
a inferência do compilador na decisão de qual tipo iremos utilizar... não entenda
isso como... deixamos de ser fortemente tipados!
Normalmente trabalhamos assim:
Dim nome As String = "Valor String"
Dim idade As Integer = 10
Mas agora podemos deixar que o compilador decida por nós J
O código:
Dim nome = "Valor String"
Dim idade = 10
Vamos decompilar e:
Public Shared Sub Main() Dim nome As String = "Valor String" Dim idade As Integer = 10
A mesma coisa J
Métodos de extensão
Podemos também a partir de agora,
criar um método de extensão a alguma classe já existente... por exemplo: podemos
adicionar um método na classe String, sem herdar a classe ou sobrescrever algo já
existente.
Exemplo:
<System.Runtime.CompilerServices.Extension()> _
Public Sub Exibir(ByVal s As String)
Console.WriteLine(s)
End Sub
Veja que adicionamos um atributo no médoto (obrigatório) e um parâmetro do tipo string.
Agora, se tivermos uma string:
Dim a As String = "Alexandre"
Podemos chamar o método criado anteriormente:
a.Exibir()
Então, é assumido que o parâmetro do método de extensão é o valor atribuído a variável.
Linq
Para quem trabalha com coleções, uma das tarefas mais chatas está associado a navegação trabalhosa entre os itens da lista... ou então, um excesso de carrega, descarrega pra cima e para baixo que acontece durante a execução. O Linq (Language Integrated Query) trás a possibilidade de navegarmos dentro de coleções de objetos. Para saber mais sobre LINQ veja aqui...
Um exemplo simples, se tivermos uma lista de Clientes (Dim lista As New List(Of Cliente)) alimentada, podemos buscar os dados neste objeto de forma semelhante a uma consulta.
Podemos adicionar alguns itens:
Dim lista As New List(Of Cliente)
lista.Add(New Cliente With {.Nome = "Cliente 1", .Idade = 10})
lista.Add(New Cliente With {.Nome = "Cliente 2", .Idade = 20})
lista.Add(New Cliente With {.Nome = "Cliente 3", .Idade = 30})
lista.Add(New Cliente With {.Nome = "Cliente 4", .Idade = 12})
lista.Add(New Cliente With {.Nome = "Cliente 5", .Idade = 14})
A partir daí, podemos fazer uma query com filtros, comparações e o que mais for necessário:
Dim clientes = From c In lista _
Where c.Idade > 12
Teremos então uma coleção de clientes com a idade maior que 12 anos, então basta navegar na coleção de clientes:
For Each c As Cliente In clientes
Console.WriteLine(c)
Next
Conclusão
São facilidades e recursos que aumentam principalmente a produtividade de desenvolvimento. O que foi apresentado aqui também é possível utilizarmos com o C#, com a sintaxe específica dele.
As linguagens evoluem, e temos que acompanhar isso para utilizarmos ao máximo o poder do que utilizamos.
- Entity Framework 4: Repositório GenéricoVisual Basic .NET
- As edições 14 da Easy .net Magazine e 88 da .net Magazine já estão disponíveis.ADO.NET
- Postando no Twiiter com .NET e Migre.meC#
- Setup ApplicationsVisual Basic .NET
- Problemas na manipulação de arquivos do MS Excel com .NETVisual Basic .NET