Académique Documents
Professionnel Documents
Culture Documents
- Introdução e Conceitos
O VB.Net não é apenas uma nova versão do Visual Basic que traz algumas melhorias em relação a versão anterior. Na verdade a mudança
é tamanha que , sem exageros , podemos dizer que vamos aprender uma nova linguagem de programação.
A partir de agora estaremos procurando tratar de explicar como usar e utilizar o Visual Basic.NET e não somente isto mas também a conhecer o
.NET Framework e ASP.NET e por que não C#.
Existem alguns artigos em português que você pode consultar para uma visão geral sobre a plataforma .NET :
1. http://www.microsoft.com/brasil/msdn/tecnologias/visualbasic_bday.asp
2. http://www.microsoft.com/brasil/msdn/tecnologias/visualbasic_virada1.asp
3. http://www.microsoft.com/brasil/msdn/tecnologias/visualbasic_webform.asp
A plataforma .NET
Mas o que é afinal a plataforma .NET ? De forma resumida podemos dizer que a plataforma .NET é um ambiente de desenvolvimento
integrado com gerenciamento de dados e estrutura de servidores para Web. Em sua estrutura a arquitetura .NET é composta pelos
seguintes softwares e pacotes :
Softwares Pacotes
a. Sistema operacional; a. SQL Server 2000;
b. Enviroments; b. Host Integration Server 2000;
c. Services Framework; c. Commerce Server 2000;
d. Common Language Runtimes (CLR); d. Visual Studio.Net;
e. Aplicações (Assemblies). e. Exchange 2000.
2-) ASP.Net - A versão atualizada do Active Server Pages composta pelo .NET Web Forms.
3-) Web Service .Net - Um serviço para permitir a comunicação com outros aplicativos , independente da plataforma usada .
4-) .Net Windows Form - Permite a criação de aplicativos dedicados para clientes Windows que usam o .Net Framework.
5-) ADO.Net - Fornece o suporte para tarefas que envolvam acesso a base de dados.
O .NET FrameWork
"O .NET FrameWork é um ambiente multi-linguagem para construção, distribuição e execução de aplicações e serviços Webs."
"O .NET FrameWork é uma nova plataforma desenhada para simplificar o desenvolvimento de aplicações voltadas para a
Internet."
"O .NET FrameWork é composta por dois componentes principais: o Common Language Runtime ( CRL ) e a livraria de classes NET
Framework."
Alguma dúvida ? Já deu para perceber que o .NET Framework é o coração do .NET e que as CRL fazem o papel das DLLs das API´s do Windows e dos
arquivos run-times do VB. Assim , ao gerar o seu executável com a VB.NET as livrarias CRL serão usadas em tempo de execução para ele possa funcionar e
assim não dependa das livrarias externas como ocorre hoje com o VB6 e anteriores.
O VB.NET
O Visual Basic.NET é uma hierarquia de classes que estão incluidas no .NET Framework sendo que a partir de agora o Visual Basic ( VB.NET ) é uma
linguagem orientada a objetos com herança , polimorfismo , encapsulamento , etc...
A versão atual do Visual Basic .NET é a versão que você encontra no Visual Studio.NET beta 2 e para poder usar você vai precisar ter os
seguintes requisitos :
O que é o .NET Framework ? Começamos este artigo com uma pergunta. Uma pergunta que não é fácil responder. Vamos tentar neste artigo responder a
pergunta e ir um pouco mais além , dando uma pequena introdução as principais classes do .NET Framework.
"O .NET Framework é uma nova plataforma que simplifica o desenvolvimento de aplicações para o ambiente altamente distribuído da Web". Seus objetivos
principais são :
Os dois principais componentes do .NET Framework são o CLR e a livraria de classes(Class library). O CLR gerencia a memória, as threads , a verificação da
segurança, a compilação e o código em tempo de execução e a livraria de classes é uma coleção de classes orientadas a objeto de tipos reutilizáveis
integradas com a CLR . O .NET Framework pode ser usado para criar os seguintes tipos de aplicações e serviços:
O .NET Framework é então um poderoso ambiente de desenvolvimento que consiste de vários componentes e serviços combinados. É constituído de
milhares de classes (umas 6 mil) que provêm toda funcionalidade que antes você encontrava quer no Windows quer no Visual Basic.
Nota: Já deu para perceber que com tantas classes encontrar aquele classe que você precisa pode se tornar um martírio. Para facilitar a sua vida o .NET
Framework é organizado de forma hierárquica existem os espaços de nomes (Namespaces) que compõe e indicam uma determinada ramificação na
hierarquia. Nos namespaces a denominação para cada espaço de nome é composta de uma série de trechos separados por um ponto. Ex: O namespace
System.Data.SqlClient esta relacionado a System.Data mas não esta contido nele pois esta num nivel hierárquico superior.
No .NET Framework há dois nomes de nível mais elevado: System e Microsoft. Os espaço de nomes System estão disponíveis para usuários do VB .NET. O
espaço de nome Microsoft é especifico do Visual Studio .
O .NET Framework contém o CLR - Common Languague Runtime ; ele é responsável pela execução do código que você gerou no ambiente ; quer usando VB
.NET , ASP.NET ou outra linguagem .NET. Todas as linguagens são compiladas para a MSIL - Microsoft Intermediate Languague que em seguida é
convertido em código nativo durante sua primeira execução.(uma JVM - Java Virtual Machine da vida...).
Todas as linguagens com o suporte do CLR possuem o mesmo tipo de dados , com isto fica mais fácil a passagem de parâmetros entre as linguagens , você
não precisa fazer mais conversões nem malabarismos.
Podemos dizer então que o CLR é o coração do .NET Framework , e , apesar disto , ele trabalhar em oculto , sendo que a parte que aparece do .NET
Framework são as classes que usamos na nossa aplicação. Vejamos algumas das classes úteis do ambiente que você com certeza irá usar mais cedo ou mais
tarde.
Nota: Para rodar o .NET Framework existem alguns pré-requisitos de hardware . Abaixo um resumo das plataforma que suportam o .NET Framework
tanto para o cliente como para o servidor:
Cenário Sistema Operacional
Cliente Microsoft® Windows® 98
Microsoft® Windows® 98 Second Edition
Microsoft® Windows® Millennium Edition
Microsoft® Windows NT® 4.0 Workstation com Service Pack 6.0a ou superior
Microsoft® Windows NT® 4.0 Server com Service Pack 6.0a ou superior
Microsoft® Windows® 2000 Professional
Microsoft® Windows® 2000 Server
Microsoft® Windows® 2000 Advanced Server
Microsoft® Windows® XP Home Edition
Microsoft® Windows® XP Professional
Para usar características adicionais como ASP.NET, COM+ services, e SQL Server .NET Data Provider, você vai precisar dos seguintes softwares:
A classe Math
A classe Math fornece constantes e métodos estáticos ou compartilhados ( um método estático/compartilhado pode ser usado sem instanciar a classe Math)
para funções matemáticas relacionadas a trigonometria , logarítimos , etc.. Abaixo vou mostrar os mais importantes:
Para ver como usar os métodos leia o artigo: Usando alguns métodos do namespace System.Math
A classe Console
Já usamos a classe console em artigos anteriores. Para inteirar-se leia os artigos:
Método Descrição
Read Lê informações a partir da linha de comando.(Lê o próximo caractere)
Readline Lê informações a partir da linha de comando. Lê a próxima linha (todos os caracteres até encontrar o Enter) ( não o incluí)
Setin Altera a origem de entrada para Read e ReadLine.
SetError Altera o destino das mensagens de erro durante a execução do seu programa
SetOut Altera o destino dos métodos Write e Writeline.
Write Exibe informações na linha de comando.
Writline Exibe informações na linha de comando.(Termina com uma nova linha)
Abaixo temos um exemplo usando alguns dos métodos acima. Vamos explicar como ele funciona:
Podemos redirecionar a entrada , a saída ou as informações de erro do nosso programa para qualquer destino onde houver um TextReader ou TextWriter.No
exemplo abaixo iremos direcionar o resultado para um arquivo:
Nota : A classe TextReader representa um leitor que pode ler uma série sequêncial de caracteres. Como é uma classe abstrata não pode ser instânciada
diretamente; devemos criar uma classe derivada que herde as características e implemente os métodos da classe TextReader.
Module Module1
For x = 0 To CONTADOR - 1
Itens(x) = Console.ReadLine
Next
Console.WriteLine()
Console.SetOut(Arquivo)
Console.WriteLine("Itens incluídos")
For x = 0 To CONTADOR - 1
Console.WriteLine(Itens(x))
Next
Arquivo.Close()
Console.SetOut(Saida)
Console.ReadLine()
End Sub
End Module
O código acima irá gerar o arquivo Saida_Console.txt com os dados inseridos via console pelo usuário.
A classe Environment
A classe Environment permite que você obtenha informações a respeito do ambiente onde os seus programas são executados ( sistema operacional
,variáveis de ambiente , configurações , etc..). Alguns de seus métodos e propriedades são descritos a seguir:
Membro Descrição
OSVersion Retorna informações a respeito do sistema operacional atual
Version Obtêm informações sobre a versão da aplicação
CurrentDirectory Retorna o caminho atual do diretório
CommandLine Retorna a linha de comandos completa que iniciou a aplicação
SystemDirectory Retorna o caminho do diretório do sistema.(Ex: \windows\system32 )
A classe Random
A classe Random é usada para gerar números aleatórios (inteiros(Integer) , duplos(double), etc.) Seus métodos são :
Membro Descrição
Next Retorna um número entre 0 e o valor máximo possível para um inteiro ( algo em torno de 2 bilhões)
Next(ValorMaximo) Retorna um número entre 0 e o valor definido por ValorMaximo
Next(ValorMinimo, ValorMaximo) Retorna um inteiro entre os valores mínimo e máximo
NextDouble Retorna um tipo double entre 0 e 1
ArrayList é um conjunto parecido com um array , tem a seu favor uma maior facilidade no tratamento dos elementos e a permissão de armazenar qualquer
tipo de dados (até objetos). Geralmente você usa esta classe quando precisa tratar uma lista de itens dinâmica e não tem uma noção de até onde o conjunto
vai crescer.
Depois é só selecionar os passos 2 e 3 para instalar o Visual Studio .NET (incluindo o Visual Basic.NET) no seu sistema. Acabada a instalação você terá
o Visual Basic .NET instalado da versão Beta 2 do Visual Studio .NET. Veja bem a versão final ainda não saiu , está prevista para janeiro ou fevereiro de 2002
e , por isso mesmo , pode haver , a esta altura, pequenas alterações.
Por falar em alterações , antes de pôr a mão na massa , você precisa saber que :
- No Visual Basic .NET só existe um único tipo de arquivo de código que tem a extensão .vb . Neste arquivo coexistem todos os outros tipos de arquivos :
módulos de classe, formulários , módulo de código , controles , etc.
- O Visual Basic .NET pode criar outros tipos de aplicações tais como : ASP .NET , Web Services , serviços Windows , Console Application , etc..
- Programas gerados pela compilação no VB.NET podem gerar um pacote de instalação de 40 a 50 MB , devido aos arquivos de run-time necessários.
file:///d|/geo_hp/livro_mac1.htm (8 of 85) [01/11/03 18:03:18]
Nova pagina 1
- Programas compilados com o VB.NET pode ser decompilados para se obter o código fonte.
Representando graficamente, abaixo temos o conteúdo dos serviços que você pode gerar com o Visual Studio .NET :
● Como parte do Visual Studio .NET - uma suíte de ferramentas e linguagens que além do VB.NET também incluí a linguagem C# ( C-sharp) e Visual
C++ .NET ( por enquanto)
● Na edição padrão - Standard Edition - a qual inclui um conjunto mais limitado de ferramentas.
Em ambos os casos você poderá criar suas próprias aplicações para a plataforma Windows. A instalação não é muito complexa , você só vai ter que por e
tirar os CD´s e seguir as orientações dos assistentes de instalação.
A seguir vou dar um resumo ( sem exibir as telas ) dos passos da instalação do Visual Basic .NET via instalação do Visual Studio .NET(daqui pra frente
apenas VS NET):
1. Após inserir o CD #1 no seu CD-ROM após alguns instantes a tela de Setup do VS .NET irá surgir. Se isto não ocorrer você vai ter que executar o
arquivo setupe.exe manualmente a partir da raiz do CD.
2. A tela de Setup do VS .NET irá apresentar as três etapas que será seguida nesta fase de instalação.
1. Windows Component Update
2. Visual Studio .NET
3. Service Releases
file:///d|/geo_hp/livro_mac1.htm (9 of 85) [01/11/03 18:03:18]
Nova pagina 1
Para funcionar de forma correta o VS .NET precisa que diversos componentes e atualizações estejam instalados em sua máquina. Por isto você deverá
clicar no item 1 - Windows Component Update. A seguir será solicitado que você insira o CD - Component Update
3. O programa de instalação irá então examinar seu sistema para ver exatamente quais componentes terão que ser instalados. Dependendo do estado
atual da sua máquina , a lista pode incluir os seguintes itens:
● Windows NT 4.0 Service Pack 6.0a
● Windows 2000 Service Pack 2
● Windows Installer 2.0
● Windows Management Infrastructure
● FrontPage 2000 Web Extensions
● FrontPage 2000 Server Extensions
● Setup RunTime Files
● Internet Explorer 6.0 and Internet Tools
● Microsoft Data Access Components 2.7
● .NET Framework
4. Click em - Install Now - e você deverá dar vários boots na sua máquina para a instalação e atualização de cada componente. Após a instalação cada
componente aparecerá com um checkbox marcado indicando que o componente já foi instalado.
5. Após instalar todos os componentes necessários e atualizar o seu sistema você retornará a janela de Setup do VS .NET . Clique então no item 2 -
Visual Studio .NET para iniciar a instalação do VS .NET.
6. A seguir será apresentada a você uma lista com opções de componentes que você deseja instalar.
7. O VS .NET possui toda a documentação que você pode instalar ou consultar a partir do CD. O padrão é deixar a documentação no CD .Se Você deseja
instalar toda a documentação vai precisar de muito espaço livre no seu HD. Abaixo uma relação dos arquivos e o espaço ocupado:
8. Após terminar a instalação a janela com a mensagem - Setup is complete - irá surgir , e , nela você poderá verificar os erros que ocorreram durante a
instalação. Poderá também consultar o arquivo de log da instalação.
9. Para encerrar você retornar a tela inicial com o terceiro item habilitado - 3 - Service Release - nele você poderá proceder a atualização de algum
componente instalado pelo seu CD de instalação.
Componentes : Microsoft Development Environment , Microsoft SQL Server Desktop Engine - MSDE
Plataformas que podem rodar aplicações feitas no VS .NET : Windows 98 e versões superiores do Windows.
O .NET framework define o ambiente que você irá usar para executar as aplicações feitas no Visual Basic .NET. Abaixo uma visão geral do .NET Framework
através de um esquema:
- A .NET Framework consiste de dois componentes principais : .NET Framework Class Library e
Common Language Runtime
- .NET Framework Class Library fornece codigo pré-escrito na forma de classes que estão
disponíveis para todas as linguagens .NET
- A Common Language Runtime , ou CLR , é a base do .NET Framework. Ela gerencia a execução
dos programas .NET coordenando funções como gerenciamento de memória , execução do código ,
segurança e outros serviços.
- A Common Type System é um componente da CLR que verifica se todos as aplicações .NET usam o
mesmo tipo de dados sem considerar a linguagem na qual foi desenvolvida.
Pensa que eu estou brincando ??? Então senta que la vem chumbo grosso ...
a. - Embora possua um assistente de migração , estima-se que apenas 40% dos projetos feitos na versão 6.0 do VB consigam uma migração parcial.
Quer migrar projetos grandes e complexos ?? Ou você quer perder o emprego ou ficou louco !!! é melhor reescrever tudo na nova plataforma.
b. - Sua aplicação utiliza muitos controles OLE ?? Então , dançou , o VB.NET não suporta mais OLE.
c. - Voce usa e abusa dos métodos DDE ?? Lamento , no VB.NET o método de comunicação é totalmente diferente.
d. - Seu sistema usa controles do - Windows Common Controls - ou usa o Data Bound Grid do VB 5 ??? Infelizmente nada disso existe no VB.NET.
e. - Gosta de usar controles vinculados DAO ou RDO ? Chiii... O VB.NET não dá suporte para conexão a base de dados via DAO ou RDO no modo
vinculado.
f. - Aplicações DHTM ou aplicações Web ??? Nem pensar ! não há equivalentes no VB.NET.
g. - Programas Gráficos ??? O VB.NET não oferece suporte aos métodos gráficos dos forms nem aos controles Line e Shape...
h. - Usando muitas API´s ??? O VB.NET exige uma revisão geral das suas chamadas API´s para evitar supresas desagradáveis...
i. Agora uma 'PEQUENA' relação do que NÃO É MAIS SUPORTADO PELO VB.NET
Prepare-se para aprender : (Estarei aqui com muitos artigos sobre o assunto... )
O VB.NET apresenta como novidade a nível de escopo de variáveis o conceito de escopo de bloco.
O que quer dizer isto ???
Bem , isto quer dizer que se você declarar uma variável dentro de um bloco ela estará disponível somente dentro daquele bloco. Entendeu ???
Veja abaixo o exemplo:
Do
Dim nSoma As long
nSoma = nSoma + 1
Loop until nSoma < 100
Msgbox (nSoma) <<== vai ocorrer um erro nesta linha pois nSoma não é visivel fora do bloco Do/Loop
...
Aqui nSoma foi declarada dentro do bloco Do/Loop e é somente visível dentro deste bloco ; se você referenciara variável fora do bloco vai ocorrer um erro.
No VB6 não existe este conceito , ao declarar uma variável dentro de um bloco não afeta o seu escopo.
Voce pode acessar a variável fora do bloco se problemas:
Do
Dim nSoma As long
nSoma = nSoma + 1
Loop until nSoma < 100
Msgbox (nSoma)
...
file:///d|/geo_hp/livro_mac1.htm (12 of 85) [01/11/03 18:03:18]
Nova pagina 1
Para você não ter este problema declare as variáveis fora dos laços : Loops Do, For , While e das instruções Select, If , e desenvolva outro bloco.
Como cada caso é um caso peculiar e cada pessoa tem sua própria curva de aprendizado vou procurar apontar recomendações genéricas que sirvam tanto
para quem já tem experiência na linguagem Visual Basic como para quem esta começando agora.
1- Se você já tem alguma experiência com Visual Basic e pretende aprender VB .NET foque seu objetivo nisto: Aprender só VB .NET.
Como você já possui algum conhecimento de Visual Basic já começa com vantagem o processo de aprendizagem. Nada de querer aprender C# junto com o
VB .NET , você poderá se sentir frustrado e confuso com o aprendizado do C#. Depois que você tiver uma boa base de VB .NET aprender C# será mais fácil.
Se você não tem experiência comece com o mais simples : Windows Forms. Se já tiver experiência faça sua escolha de acordo com sua necessidade de
utilização mais imediata. Mas atenção : um de cada vez.
Primeiro familiarize-se com os conceitos da plataforma .NET , com os conceitos da linguagem VB .NET. Não gaste seu tempo tentando criar aplicações sem
ter uma base de conhecimento da plataforma ou uma visão geral do funcionamento da linguagem VB .NET.
4- Faça uma auto-crítica : Se você não têm uma boa base de conhecimento em programação orientada a objetos. Começa agora.
A plataforma .NET é baseada em objetos e classes. Na verdade a plataforma .NET possui quase 2000 classes que irão funcionar como blocos lógicos que
servirão para construir sua aplicação. Você vai precisar de um bom conhecimento de orientação a objeto para compreender as classes e de como utilizá-las.
Você deve estudar bem a CLR - Common Language Runtime e as livrarias de classes .NET . O seu conhecimento sobre estes tópicos irão afetar diretamente
o modo como você vai construir sua aplicações quer em tempo de desenvolvimento , em segurança , em bugs e em memória usada por elas.
6- Procure consultar a Ajuda da plataforma .NET. Familiarize-se com os conceitos e sempre consulta a ajuda para qualquer dúvida.
7- Se você pretende criar aplicações com acesso a dados estude bem a ADO .NET.
Estude as classes ADO .NET ; perceba as diferenças entre ADO e ADO.NET. Perceba as novas características da ADO .NET. Não tente programar o acesso a
dados com ADO .NET baseado apenas na sua experiência com ADO : você vai se dar mal.
8- Comece com aplicações simples : Modele , desenvolva , teste e distribua pequenas aplicações primeiro.
9- Migre primeiro projetos simples feitos em VB6 para VB .NET. Não confie no assistente de conversão ele não faz uma conversão 100%.
Se você tem uma aplicação complexa feita em VB6 e esta considerando migrar para VB.NET eu não aconselho você a fazer isto logo de cara. Se você quer
perder o emprego o problema é seu mas seja sensato e veja como se comporta a conversão de uma pequena aplicação e a partir dai tire suas conclusões.
A XML é intensamente usada em toda a plataforma .NET. Se você não sabe nem o que quer disser XML é um mau sinal. Procure se atualizar sobre a
tecnologia XML.
Não que eu esteja te 'cutucando' para que você abandone o VB6 e passe usar o VB.NET como sua plataforma de desenvolvimento a partir de hoje , nada
disto !! , mas é bom você sair um pouco desta letargia e , como alguém que não quer nada , procurar se atualizar e conhecer tudo sobre a plataforma .NET
(principalmente o VB.NET)
Você sabia que o Visual Studio .NET possui um assistente de migração para o VB.NET que ajuda a migrar aplicações desenvolvidas em versões anteriores do
Visual Basic ( melhor dizer a partir da versão 6.0) para o VB.NET ? Estou falando do : Visual Basic Upgrade Wizard.
Neste artigo eu vou mostrar como podemos usar este assistente para nos ajudar a migrar uma aplicação feita no Visual Basic 6.0 para o VB.NET. Primeiro eu
vou criar uma aplicação simples no VB 6.0 e depois vamos ver como podemos fazer a migração usando o assistente e todas as implicações que isto vai nos
trazer...
Vamos criar uma aplicação simples no VB 6.0 . Ela terá apenas dois formulários ; em um formulário vamos exibir os dados do banco de dados
Northwind.mdb , tabela produtos , em um controle - Microsoft Hierarchical Flexgrid e no outro vamos usar o Clipboard (área de transferência) do
windows.
1- Inicie no Visual Basic 6.0 um projeto do tipo Standard.EXE e altere o nome do formulário padrão para frmVB6_ADO
2- No menu Project opção Components... inclua uma referência a - Microsoft Hierarchical FlexGrid Control 6.0 e na opção References... inclua a
referência a - Microsoft Activex Data Object 2.X .
3- A seguir insira o controle MSHFlexGrid - MSHFlexgrid1 - no formulário e insira também um botão de comando - command1 - com a propriedade Caption
definida como - &OK . Veja abaixo :
Set MSHFlexGrid1.DataSource = rs
End Sub
O código ao lado da figura usa uma conexão ADO para abrir o banco de dados Nwind_2.mdb , e exibir todos os campos da tabela Produtos. Fazemos isto
atribuindo á propriedade DataSource do controle MSHFlexgrid a instrução SQL.
Não nos preocupamos em configurar a exibição dos dados pois nosso foco
será a migração para o VB.NET
Vamos agora incluir no novo formulário ao nosso projeto ; selecione a opção Project -> Add Form - Form; altere a seguir o nome do formulário para
frmClipboard .
Insira uma caixa de texto no formulário e na propriedade Text informe - Minha primeira aplicação migrada para VB.NET.
Agora insira dois botões de comando e altere a propriedade Caption para de command1 para &Copiar e de command2 - para &Colar.. Veja o layout
abaixo:
O código ao lado da figura representa a ação de cada evento Click dos botões de comando. No botão command1 copiamos o texto da caixa de texto -
text1.text para o ClipBoard ; no botão de command2 - Colamos o valor copiado para a caixa de texto - text1.text.
Já temos nossa aplicação pronta no VB 6.0 . Vamos migrar a dita cuja para o VB.NET ? Bem , vamos tentar...
4. Clique no botão Next . A tela abaixo irá surgir ; nela você deverá escolher um tipo de aplicação a ser convertida : EXE ou DLL , e , definir algumas
opções (geralmente o Wizard faz isto para você)
6. Clique no botão - Next . Na tela a seguir você deve informar o local onde deseja criar o seu novo projeto. Por padrão o Assistente usa o diretório com
o nome do seu projeto e a extensão .NET.(perceba que o Wizard sugere o nome do projeto que será migrado)
7. A próxima tela informa que tudo esta pronto para começar a migração. Clique em - Next
8. O Assistente de migração começa a realizar a migração informando o tempo estimado.(Deve demorar de 30 a 60 segundos dependendo do tamanho
do projeto)
Vamos dar uma olhada no novo projeto ? Curioso hein ??? No Solution Explorer veremos os
arquivos gerados pelo Assistente : os formulários e um arquivo htm chamado :
_UpgradeReport.htm.
Como resultado teremos a tela exibida abaixo ; nela temos oresultado da nossa migração , uma lista detalhada de todos os problemas encontrados na
migração. Perceba que o houve problemas na migração do formulário frmclipboard . O relatório apresenta um resumo da atualização de todos os artigos do
projeto . As colunas exibidas são :
● New Filename : O novo nome que foi dado ao arquivo após a conversão.
● Original Filename : O nome original do arquivo antes da conversão.
● File Type : O tipo do arquivo : ( formulário , Módulo de classe , Módulo...)
● Status : Indica o status do arquivo durante a migração . Se houve erros ou não.
● Errors : O número de erros gerados durante a atualização do arquivo para a nova versão.
● Warnings : O número de avisos gerados durante a migração do arquivo.
● Total Issues : Total dos problemas encontrados durante a conversão.
Vamos expandir o item - frmclipboard - (Clique no sinal de + ). Veja o comentário indicando que os comandos Clipboard.SetText e Clipboard.GetText não
foram migrados.
O relatório acima indica os arquivos que apresentaram problemas durante a migração. Vejamos o significado de cada coluna :
Percebeu que todos os formulário mantiveram o mesmo nome que usaram na versão anterior ; somente a extensão foi alterada de .frm para .vb
Se fizermos o mesmo para o formulário frmclipboard.vb veremos que assistente inclui um comentário no código que não conseguir migrar.
Private Sub Command2_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command2.Click
Form2.DefInstance.ShowDialog()
End Sub
Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
cn = New ADODB.Connection
cn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=C:\teste\Nwind_2.mdb"
cn.Open()
rs = New ADODB.Recordset
rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient
rs.Open("Select * from produtos", cn)
MSHFlexGrid1.DataSource = rs
End Sub
End Class
O código que está em azul é o código que efetivamente você vai ver no projeto.
Concluimos que embora o Upgrade Wizard ajude muito no processo de migração , com as mudanças ocorridas na linguagem VB.NET , muitas
incompatibilidades deverão ocorrer. Se você quer uma migração menos traumática o ideal é ajustar a sua antiga aplicação preparando para a migração.
Acho que você já percebeu que o VB.NET trás um conjunto de ferramentas , métodos , propriedades e conceitos antes não existentes nas versões anteriores
, e, isto com certeza irá facilitar muito o trabalho do desenvolvedor que usa o Visual Basic como ferramenta. Neste artigo eu vou fazer uma abordagem bem
básica sobre os principais conceitos necessários para escrever código VB.NET : variáveis , constantes , operadores , cálculos , rotinas , funções ,
fundamentos para escrever código robusto , etc...
Se você já domina estes assuntos pode parar a leitura aqui mesmo , o objetivo e fornecer uma base sólida para quem esta começando a programar usando
o Visual Basic e está com medo de enfrentar a nova plataforma .NET , para quem começou ,parou e quer voltar , para quem já começou ...
Variáveis
O conceito de variável é fundamental em qualquer linguagem de programação , portanto , não poderia ser diferente com o VB.NET.
O que é uma variável ? ( bem ai vareia !!! ) . Podemos dizer que variável é um lugar que usamos para armazenar uma informação que pode sofrer
alteração durante a execução de um programa.
As variáveis são usadas para guardar valores que serão usados durante o decorrer do programa , para guardar informações fornecidas pelo usuário e que
será exibida mais tarde. Cada variável que usamos é identificada por um nome e por um tipo.
Você pode guardar informação de diversos tipos em uma variável : números pequenos , números médios , números grandes , letras , palavras , frases ,
páginas de texto , etc...; Então dizemos que uma variável tem um nome que a identifica e um tipo de dado que esta armazenando. Quando você guarda
uma informação em uma variável esta usando a memória do computador para isto , e , quanto maior a informação que você guardar mais memória você vai
gastar dependendo do tipo de variável que decidir usar.
Se você precisar realizar cálculos que envolvam somente valores inteiros deverá procurar usar uma variável do tipo Integer , você pode usar uma variável do
tipo Long , Single e Double mas com isto irá gastar mais memória.
1. Variáveis simples - usadas para guardar valores simples como números e strings(alfanuméricas)
2. Variáveis complexas - usadas para guardar valores mais complexos , vetores , e tipos definidos pelo usuário
3. Variáveis objeto - usadas para guardar variáveis objeto
Variáveis Simples
As variáveis simples guardam números e strings ; neste caso podemos ter números pequenos e números maiores , com o intuíto de economizar memória
podemos dividir estas variáveis nos seguintes grupos de tipos :
1. Inteiros
2. Decimais
3. Strings e caracteres
4. Outras (data , Boolean)
Inteiros
Os inteiros são valores numéricos que não possuem casas decimais e são muito usadas em qualquer programa VB.NET . Não gastam muita memória do
computador e tornam o processamento e os cálculos mais rápidos. Por isto se você pode escolher um tipo de variável escolha Inteiro (se isto se adequar ao
seu caso é claro... ). Na tabela abaixo as variáveis do tipo Inteiro:
Tamanho
Tipo de Dado Intervalo Comentário
em Bytes
-3.402823x 10^38 ate 1.401298 x 10^-45 (negativos) e
Para cálculos que exijam certa
Single 4
precisão.
1.401298x10^-45 até 3.402823x10^38 (positivos)
-1.79769313486231570E+308 até -4.94065645841246544E-324 (negativos) Trata valores com dupla precisão até
15 casas decimais ; usado para
Double 8
cálculos com números muito grandes
4.94065645841246544E-324 até 1.79769313486231570E+308 (positivos) que exijam muita precisão.
String e Caracteres
Note que cada caractere precisa de 2 bytes para ser representado , pois o sistema usado aqui é o UNICODE. No sistema ASCII cada caractere é
representado por um byte(com isto podemos representar apensa 256 caracteres) ;Para acomodar caracteres especiais usados em outras línguas ( Russo ,
file:///d|/geo_hp/livro_mac1.htm (31 of 85) [01/11/03 18:03:18]
Nova pagina 1
Grego , Japonês) e incluir também outros sínbolos o sistema UNICODE usa dois bytes para representar cada caractere. O VB.NET usa o UNICODE para todos
os caracteres.
Nota: Você pode armazenar datas em outro tipo de variável como String ou Integer , mas para evitar dores de cabeça procure usar o tipo Date.
Declarando variáveis
Agora que já falamos sobre variáveis e seus tipos vamos ver como usar variáveis em um programa VB.NET. A maneira mais simples de usar uma variável é
usar a palavra chave Dim (dimension) seguida pelo nome da variável , a palavra chave AS e o tipo da variável. Exemplo:
Aqui estamos criando uma nova variável chamada valor que irá ocupar 4 bytes e que poderá tratar valores numéricos
Dim valor As Integer
na entre : -2.147.483.648 até 2.147.483.647
O VB.NET trouxe como novidade a possibilidade de atribuir o valor para a variável durante a sua criação usando a linha da declaração. Assim :
Dim valor As Integer = 100 ou Dim dtNascimento As Date = #15/03/1978# ou Dim nome As String = "Macoratti"
Para maiores detalhes sobre este tópico leia o artigo : VB.NET - Declaração de variáveis o que mudou ?
Vetores ( Arrays)
Os vetores são usados para armazenar e referenciar uma série de variáveis pelo mesmo nome (uma coleção de valores relacionados). Assim podemos usar
um vetor para armazenar todos os nomes dos alunos de uma escola , todas as datas de aniversário dos seus amigos, todos os valores da sua conta corrente
, etc.... Cada item armazenado no vetor é identificado por um índice.
A dimensão de um array é o número que identifica quando índices iremos usar para identificar uma item do array .Um array pode ter de uma até 32
dimensões. Cada dimensão de um array possui um comprimento diferente de zero. Os elementos de um array são contíguos e iniciam no índice igual a zero
até o valor de maior valor. Quanto maior a dimensão do array você usar mais memória vai precisar ser alocada. Exemplos:
Acima declaramos um array de duas dimensões que possuirá 5 linhas ( 0 a 4) e 10 colunas ( 0 a 9) perfazendo um total de 50 elementos.
Dim semana() As String = {"Segunda" , "Terca", "Quarta" , "Quinta" , "Sexta" , "Sabado" , "Domingo"}
Neste caso já definimos quais os elementos do vetor semana. Assim para obter o elemento segunda fazemos : dia = semana(0)
Como os arrays não possuem um tamanho fixo no VB.NET podemos alterar o tamanho de um array criado previamente usando a declaração ReDim.
Ex: ReDim Matriz(59) - redimensiona o array criado usando a instrução - Dim Matriz(49) AS integer
Obs: No VB.NET não podemos iniciar um array usando a declaração : Dim valor(2 to 10) As Single quando fazíamos isto no VB6 , as matrizes ficavam
com o tamanho fixo e não podiam ser redimensionadas com a declaração Redim.
No VB.NET todas as matrizes podem ser redimensionáveis através da declaração Redim , você só não pode mudar o número de dimensões da matriz. Além
disto o VB.NET trouxe inovações na sintaxe da declaração de matrizes. Podemos ter :
Dim Salas As Integer = { 1, 2, 3 , 4, 5, 6, 7, 8, 9, 10, 11, 12} - inicializa a matriz com valores
Nota: Se você não definir um valor inicial para uma variável o VB.NET irá atribuir valores padrões conforme a tabela abaixo:
Tipo Valor
Boolean False
Date 12:00:00AM
Tipos Numéricos 0
Objeto Nothing
Constantes
Constantes sãos valores que não sofrem alterações durante a execução do programa. (Exemplos : As constantes físicas e matemáticas : PI , o valor de
e(logaritimo neperiano) , a velocidade da luz , do som , etc... Declaramos um valor como sendo uma constante na sua declaração. As duas formas de
declarar uma constante são :
Obs: As constantes da linguagem VB sofrem alterações no VB.NET . Abaixo mostramos algumas mudanças para constantes de código de teclas :
(Para ver a tabela completa clique aqui - tabela de constantes para teclas )
Já falamos sobre variáveis e constantes no artigo anterior e vimos como são importantes , mas , de que adianta criar variáveis e constantes se eu não posso
fazer nada com elas ? Por isso o VB.NET oferece um conjunto de funções que podemos usar para fazer algo de útil . O VB.NET possui também operadores
matemáticos que podemos usar para realizar cálculos outras operações : junte tudo isto e já podemos ver o VB.NET funcionando a todo vapor. Vou mostrar
a seguir os operadores mais comumente usados no Visual Basic.Net
Obs: A classe Math do namespace System possui diversos métodos que oferecem um suporte matemático. (Ex: Atan , Exp , Sign , Sqrt , Pow , Min , Round ,
Abs , Cos , Sin , Tan , etc...)
Além destas funções oferecidas pelo .NET Framework o Visual Basic .NET possui muitas funções intrínsecas que permite realizar além de conversões entre
tipos de variáveis , cálculos matemáticos , manipulação de strings , etc. Vejamos primeiro as funções para conversão de variáveis:
Todas as funções de conversão no VB.NET iniciam com a letra C ( de conversão ) e terminam com uma forma abreviada do novo tipo . Existem também a
função de conversão genérica - Ctype - que pode converter para qualquer tipo. Vejamos as principais:
Nota:
1. Se a expressão submetida a função estiver fora do intervalo do tipo de dados para o qual você quer converter ocorrerá um erro
2. Usamos estas funções para forçar que o resultado de uma operação seja de um tipo particular diferente do resultado padrão. Assim usamos CDec
para forçar para decimal em casos no qual a precisão simples, dupla ou um valor inteiro normalmente iria ocorrer.
3. Se o valor fracionário submetido for exatamente 0,5 , CInt e CLng irão arredondar para o número par mais próximo. Assim 0,5 será arredondado
para 0 e 1,5 será arredondado para 2.
4. CDate reconhece o formato de datas de acordo com a configuração local do sistema. Você deve informar o dia , mês e ano na ordem correta de
acordo com a configuração local.
Vejamos agora as principais funções para manipular Strings : (Para maiores detalhes leia o artigo: Strings um novo enfoque )
Para encerrar com as funções intrínsecas abaixo temos algumas funções úteis:
Bem , você já tem a disposição um verdadeiro arsenal de funções que já lhe dão um idéia do poder de fogo do VB.NET e , tenha certeza , isto é apenas o
começo. Na continuação deste artigo vou mostrar como criar suas próprias funções e do escopo das variáveis.
No artigo anterior você foi apresentado ás funções que o VB.NET oferece para facilitar sua vida. Mas sempre vai ficar faltando alguma coisa ; embora o
VB.NET possua milhares de funções prontas para você usar , com certeza no dia a dia você vai ter que criar sua própria função. Sem problema algum ! ; o
VB.NET permite que você crie suas próprias rotinas e funções. É isto que vamos mostrar agora.
1. Sub-rotinas - Sub - Sâo rotinas que realizam tarefas e que não retornam valor algum.
2. Funções - Function - São rotinas que realizam tarefas e que retornam valores.
Sub-rotinas
As sub-rotinas são um bloco de código VB.NET que realiza um serviço e não retorna nenhum valor. Quando você usa o código : Console.Writeline esta
usando uma sub-rotina que apenas imprime uma informação na tela e não retorna valor algum.
Você cria uma sub-rotina quando deseja realizar uma tarefa que vai ser repetida muitas vezes ou se a mesma tarefa precisa ser usada em muitos
programas. Com isto você esta agrupando o seu código e tornando-o mais fácil de localizar e manter pois basta você invocar a sua sub-rotina para fazer o
serviço ao invés de ter que escrever todo o código novamente.
Para criar uma sub-rotina você usa a palavra-chave - Sub - seguido do nome da sub-rotina e dos parâmetros que você esta passando para ela. Os
parâmetros são valores que você passa para sub-rotina usar na realização da tarefa que lhe foi atribuída. A sub-rotina termina com a palavra-chave : End
Sub. Vejamos como fica a sintaxe:
file:///d|/geo_hp/livro_mac1.htm (38 of 85) [01/11/03 18:03:18]
Nova pagina 1
Abaixo temos um exemplo de uma sub-rotina que multiplica dois números inteiros x e y e escreve o resultado no console:
Module Module1
Sub Main()
Console.WriteLine("Vou chamar a Sub-rotina : Multiplica com os parametros: 521 e 123.")
Console.WriteLine("Pressione algo para ver o resultado...")
Console.Read()
Multiplica(521, 123)
End Sub
Funções
As funções são idênticas ás sub-rotinas a única mudança é que elas retorna um valor. No caso das funções usamos a palavra-chave : Function seguida do
nome da função e da relação dos parâmetros e terminamos com a palavra-chave : End Function. No código da função usamos também a palavra-chave :
Return que irá retornar o valor da função. Assim temos:
Usando o mesmo exemplo podemos criar uma função para multiplicar dois números inteiros e retornar o resultado. Assim:
Module Module1
Sub Main()
Console.WriteLine("Vou chamar a Função : Multiplica c/parametros: 521 e 123.")
Console.WriteLine("Pressione algo para ver o resultado...")
Console.Read()
Console.Write("521 x 123 = " & Multiplica(521, 123))
Console.Read()
End Sub
Como exemplos de funções do VB.NET podemos dar como exemplo aqueles que retornam um valor para uma operação. Exemplo as funções Sqrt que
calcula a raiz quadrada de um numero e a função Cos que calcula o coseno de um ângulo. Estas funções pertencem a classe Math.
Module Module1
Sub Main()
Dim raiz, angulo As Double
raiz = Math.Sqrt(100)
angulo = Math.Cos(1.12)
O uso dos parâmetros não é obrigatório nas sub-rotinas nem nas funções , assim , você pode definir uma função sem parâmetros, mas deve definir o tipo
de valor que será retornado:
Function CalculaPreco() Dim Preco as A função CalculaPreco não usa parâmetros mas deve informar o tipo do valor que irá retornar.
As Double Double No caso a função retorna um valor do tipo Double.
'código da função
......
return valor Preco = Para usar a função temos que declarar uma variável compatível com o valor de retorna e chamar a
End Function CalculaPreco() função.
Nota: as variáveis que você declara em uma sub-rotina ou função são locais e apenas visíveis pelo código da função ou sub-rotina.
Na função multiplica usamos a palavra-chave ByVal , o que significa ByVal ? ByVal significa que estamos passando o argumento(parâmetro) por valor ;
desta forma a função ou sub-rotina não pode modificar o valor do argumento. Quando você usa ByVal o VB.NET faz uma cópia do valor do parâmetro e
então o Vb.NET passa uma cópia do valor para a rotina. Desta forma a rotina não pode alterar o valor do parâmetro.
Se quisermos permitir que o argumento seja alterado pela função ou sub-rotina devemos usar a chave ByRef. Quando você usa ByRef a rotina pode alterar
o valor do parâmetro pois recebe uma referência ao parâmetro , e, a alteração do parâmetro na rotina se reflete no parâmetro passado.Vejamos o exemplo
abaixo:
Module Module1
Sub Main()
Dim Numero As Integer = 100
Console.WriteLine("Valor de 'Numero' ANTES de chamar a sub-rotina: " & Numero)
Console.Read()
MudaValorParametro(Numero)
End Sub
Para terminar vamos falar um pouco sobre o escopo. O escopo refere-se a visibilidade das variáveis rotinas e funções dentro de um programa. Talvez você
tenha bons motivos para que uma rotina ou variável não acesse todas as variáveis do seu programa . Permitir que todas as variáveis do seu programa seja
acessadas por todas a rotinas do programa pode lhe trazer algumas dores de cabeça , pois , dependendo da complexidade do programa você pode perder o
controle sobre quem esta alterando e acessando quem.
Até agora usamos a palavra-chave Dim para declarar uma variável . Porém podemos declarar variáveis fora das rotinas e funções e assim torná-las
acessíveis a outras rotinas. Para fazer isto podemos usar as palavras-chave Public e Private:
Podemos usar as palavras-chave acima também para definir o escopo de funções e rotinas. Da mesma forma temos para funções e sub-rotinas:
1. Public - A rotina pode ser chamada de qualquer parte de sua aplicação. É o padrão quando não se informa nada.
2. Private - A rotina pode ser chamada somente por outra rotina dentro do mesmo módulo ou classe onde esta definida.
Os conceitos apresentados não esgotam o assunto , mesmo por que , abordei somente os conceitos mais usados . Em um próximo artigo vou mostrar como
aplicar todos estes conceitos em uma aplicação VB.NET. Até lá...
Nossa aplicação irá realizar um cálculo matemático envolvendo valores monetários. Vamos criar um programa para calcular o Valor Futuro de uma
determinada aplicação financeira em um determinado período a uma taxa de juros definida.
O problema é básico , temos que criar uma função que receba como informação :
● o valor inicial
● os valores dos depósitos mensais
● a taxa de juros
● e o período da aplicação
Se você nem sabe por onde começar eu vou lhe dar uma dica : felizmente o VB.NET já tem uma função para calcular o Valor Futuro : FV .
Para ter uma visão da funcionalidade do aplicativo vamos escrever como deverá ser o fluxo de dados do aplicativo usando alguns dados como exemplo :
Perceba que a fórmula usa quatro variáveis que vamos ter que definir em nossa aplicação . Primeiro vamos criar uma aplicação do tipo Console por ser mais
simples , depois iremos criar a mesma aplicação usando os Windows Forms. Vamos ao trabalho:
1 - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)
Como já mostramos acima temos que definir quatro variáveis para armazenar os dados que vamos informar para a aplicação calcular o valor futuro usando a
forma já descrita.
Declaramos as quatro variáveis como privadas (Private) desta forma elas serão visíveis somente dentro do
módulo.
- No início de cada nome de cada uma das variáveis usei um prefixo para identificar qual o tipo da variável
Private dbTaxaAnual As Double =0 (esta é uma boa prática de programação), assim :
Private iAnos As Integer =0
Private decValorInicial As Double =0 ● db - Double
Private decDepositoMensal AS Double = 0 ● i - Integer
● dec - Decimal
Com exceção da variável iAnos que foi definida como sendo do tipo inteiro as demais foram definidas como
sendo do tipo Double. Todas as variáveis foram iniciadas com valor igual a 0.
Eu poderia colocar todo o código da aplicação na rotina Main , mas isto não seria muito aconselhável pois iríamos gerar um código difícil de ler e manter.
Vamos criar sub-rotinas para cada uma das funcionalidades que vamos precisar na nossa aplicação . Qual seriam elas ????
Você pode ter uma idéia melhor que a minha , mas eu dividi a aplicação em 3 partes , abaixo cada uma delas e a seguir uma sugestão de nome para a rotina
associada:
1. Estamos usando uma variável do tipo Double - decResultado - que irá armazenar o resultado
2. Criamos duas sub-rotinas : AlimentaVF() que irá receber os valores e MostraVF() que irá exibir o resultado
3. Criamos a função CalculaVF(dbTaxaAnual, iAnos, decDepositoMensal, decValorInicial) que irá calcular o Valor Futuro. Perceba que a função usa quatro
parâmetros que serão usados no calculo da operação.
2- A próxima etapa será criar o código para cada uma das sub-rotinas e da função usada na aplicação. Vamos começar com a sub-rotina AlimentaVF() :
- Vamos definir a rotina AlimetaVF() como sendo private ; como ela é uma sub-rotina nenhum valor será retornado. Abaixo temos uma sugestão para o
código desta sub-rotina:
End Sub
Explicação do código:
- Criamos a função - ObtemDados(msg) - que irá receber o valor informado pelo usuário. O valor retornado será armazenado em cada variável já definida
no início do módulo. O parâmetro passado para a função é a mensagem que irá aparecer para usuário ao digitar o valor. A seguir o código da função
ObtemDados(msg) :
A função ObtemDados recebe o parâmetro - msg - e exibe a mensagem usando a método - Console.Writeline . Após informar o valor e teclar ENTER o
valor é retornado via método Console.Readline. Observe que definimos o tipo de retorno da função ObtemDados como String.
3- Vamos agora ao código da função - CalculaVF() -. Esta função usa 4 parâmetros e devolve o resultado do Valor Futuro. Abaixo o código:
Private Function CalculaVF(ByVal TaxaAnual As Double, ByVal Anos As Integer, ByVal DepositoMensal As Double, ByVal ValorInicial As Double) As Double
'Vamos pegar a taxa anual e dividir por 1200 para obtermos o percentual mensal
Dim decTaxaMensal As Double = CDec(TaxaAnual / 1200)
'A seguir vamos declarar uma variável temporária e a variável que vai armazenar o valor de retorno
Dim decTemp As Double
Dim decRetorno As Double
End Function
Na função CalculaVF() usamos os parâmetros recebidos para efetuar os cálculos e retorna o valor futuro. O retorno da função é do tipo Double. A seguir
vamos exibir o valor do resultado usando a função : MostraVF(decResultado) :
A função recebe o resultado e usando o método Console.Writeline , exibe o resultado no console . Perceba que formatamos a saída usando os parâmetros
de formatação para o console. (Leia o artigo : VB.NET - Formatando a saída do console. ). O valor das variáveis irá substituir os parâmetros {0:c} e {0}
em cada posição. ( {0:c} significa : formato de moeda local)
Eu estarei usando a versão beta 1 do Visual Studio .NET , pois , por um problema técnico a minha versão beta 2 se recusa a instalar corretamente.
Embora tenham ocorrido mudanças da versão beta 1 para a beta 2 , como estamos no princípio , os conceitos básicos não foram alterados , e , se for
necessário , estarei indicando as mudanças ocorridas no código para a versão beta 2 . Como creio que em breve minha versão beta 2 , ou quem sabe , a
versão final e oficial já esteja instalada e funcionando espero não ter que usar este recurso. Detalhes a parte vamos ao projeto...
Inicie o Visual Studio .NET , você verá a tela a seguir . ( A tela de abertura da versão beta 2 é um pouco diferente mas as opções indicadas são as mesmas)
Como vamos criar um novo projeto , selecione a opção - Create New Project - ( você pode selecionar também o Menu File opção - New - Project...)
Surgirá a seguinte janela:
Agora vamos selecionar o tipo de aplicação que vamos desenvolver: Estaremos criando uma aplicação tipo Console ou Console Application. Em Name
informamos o nome do projeto - MinhaPrimeiraAplicaao ; em Location informamos o local onde vamos salvar o projeto. Note que o projeto é do tipo Visual
Basic Projects. Agora vamos clicar em OK. A próxima tela será :
Será criado um arquivo chamado - Module1.vb - com uma estrutura de código pronta para que possamos incluir nosso código e iniciar o nosso projeto.
Observe que foi criada a definição Module Module1 / End Module e internamente o procedimento Sub Main/ End Sub. Como no VB.NET temos todos os
tipos de elementos juntos em um mesmo arquivo com extensão .vb agora é necessário indicar onde começa Module1 e onde termina.
Iremos incluir um código no procedimento Sub Main. Com o cursor posicionado escreva a palavra Console. e você verá a janela a seguir:
Ao digitar o ponto você verá as funções pertinentes de Console.(Este recurso já existia no VB5/6). Selecione a função Write e complete o código como
abaixo:
Aonde eu estou querendo chegar. Você deve estar pensando... Vou explicar !
Nossa primeira aplicação irá exibir uma mensagem na tela. A mensagem será exibida em uma janela do DOS , ou seja em um console. Para isto estou
usando a classe Console e a função Write que escreve a mensagem na janela DOS. A linha a seguir - Console.read() - usa a função read() do Console
para permitir que você veja a mensagem exibida (ela funciona como uma pausa ou espera) caso contrário a janela iria se abrir e fechar tão rápido que você
iria pensar que a coisa não funcionou.
você deve obter uma janela DOS com sua mensagem exibida como a seguir:
Não fique frustrado !!! Como estamos começando achei melhor criar uma aplicação que não usasse o ambiente gráfico para não complicar as coisas. Tudo
bem que sua aplicação não sirva para nada , mas pelo menos você conseguiu fazê-la funcionar...
O VB.NET usa uma série de livrarias ( classes ) que possuem as funções que precisamos para executar uma determinada tarefa ( Write, Read , etc...). Para
exibir o texto em uma janela DOS temos que usar a livraria que contém a classe Console e suas funções. A livraria ( library ) na qual está a classe Console é
a library System a qual na verdade é um Namespace , ou seja , um Espaço de Nomes.
"Um Namespace é um esquema lógico de nomes para tipos no qual um nome de tipo simples, como MeuTipo, aparece precedido por um nome hierarquico
separado por ponto"
Antes de poder falar sobre estes conceitos quero deixar claro que a intenção não é se aprofundar no assunto mas dar uma idéia do que são e como
funcionam. Antes de começar a falar sobre Namespace ( Espacos de Nomes - Argh! vou usar Namespace mesmo !!!) vamos tentar entender o que é um
Assembly.
"Um assembly é um bloco construtivo primário de uma aplicação .NET. Sendo uma recompilação de funcionalidade que se constrói, versiona e instala como
uma única unidade de implementação. ". Muito bonito , não !!!!
Um assembly é unidade primária de construção da plataforma .NET , ou seja , é o tijolo da plataforma sobre o qual tudo o mais se apoia. Um assembly
pode ser reutilizado e é auto-descritivo de maneira a permitir que um runtime .NET possa gerenciar plenamente a aplicação. Um assembly é composto por
duas partes:
Um manifest contém :
Então simplificando, podemos dizer que um assembly é uma livraria dinâmica ( DLL ) que contém diversos e distintos espaços de nomes - NameSpaces .
Voltando agora ao Namespace , podemos dizer que os Namespaces organizam os objetos em um assembly ; assim , um assembly podem conter um ou
mais namespaces , e estes namespaces pode conter um ou mais namespaces. Desta forma os Namespaces evitam a ambiguitdade e organizam referências
quando são usados grande grupos de objetos como as librarys de classes.
O namespace raiz , ou seja, aquele que esta no topo da 'hierarquia' é o System ; dentro do namespace raiz System temos algo em torno de 100 classes
que representam todo os tipos de dados.
A classe system contém outras classes que realizam outros serviços. Dentro do NameSpace System temos , mais ou menos 24 sub-niveis de
namespaces. Veja abaixo:
Data: ● System.Data
● System.XML
Configuration: ● System.Configuration
Globalization: ● System.Globalization
● System.Resources
Net: ● System.Net
Security: ● System.Security
Dependendo do tipo de aplicação que você vai criar , você vai precisar usar o Namespace que contém os objetos relacionados. Por exemplo para usar as
declarações do ADO.NET você vai precisar incluir a seguinte linha no seu código :
Para saber quais os membros de um Namespace basta digitar o seu nome e a seguir o ponto. Uma lista será exibida na tela. ( Isto no código VB.NET )
Resumo do resumo: Um NameSpace é usado para declarar uma esfera de ação de maneira a permitir que você organize o seu código e crie seus tipos
globais.
Neste artigo vou mostrar como podemos formatar a saida do console quando escrevemos na tela usando Console.Writeline/Console.Write.
Ao usar Console.Writeline/Console.Write para escrever no console (Tela) podemos usar os modificadores {0} ,{1} ,{2} ,..etc. para exibir valores na tela ,
onde estes modificadores irão receber parâmetros que irão substituí-los durante a execução.
Sub Main()
● {0} é substituído por 3
Console.WriteLine("O numero é {0} + {1} = {2} ", 3, 7, 3 + 7)
● {1} é substituído por 7
End Sub
● {2} é substituído pelo resultado de 3+7
Quando você usar os modificadores deve estar certo de passar o mesmo número de parâmetros ou um erro de execução irá ocorrer e seu programa será
encerrado.
Vou abordar o que mudou com relação a declaração de variáveis no VB.NET . Posso adiantar que as mudanças foram para melhor em todos os aspectos.
Sem contar que o VB.NET agora é uma linguagem mais bem 'tipada' e isto vai evitar muitas 'loucuras' dantes cometidas ; se você não entender o que está
acontecendo não vai conseguir fazer rodar programas muito simples feitos na versão .NET.
Nas versões anteriores do Visual Basic , quando tinhamos múltiplas declarações aparecendo na mesma linha , para definir o tipo correto de dados de cada
variável deveríamos usar a cláusula AS explicitamente na frente de cada variável , ou seja , se você fizer uma declaração assim : Dim a , b c as String . O
que teria ? Vejamos:
Para obter o mesmo efeito no VB 6.0 teríamos que fazer a declaração assim :
Dim a , b , c AS String
file:///d|/geo_hp/livro_mac1.htm (56 of 85) [01/11/03 18:03:18]
Nova pagina 1
No VB 6.0 se você declarar uma variável sem definir explicitamente seu tipo (sem usar a cláusula AS) o tipo padrão assumido é o tipo Variant. Assim na
declaração :
no VB.NET a mesma declaração tornará a variável a do tipo Object . Object é o valor padrão para variáveis no VB.NET.
O Visual Basic .NET trouxe um novo escopo para as variáveis: o escopo a nível de blocos. Assim no VB.NET quando você declara uma variável dentro de um
bloco de código : FOR...NEXT , DO WHILE , IF..THEN , SELECT...CASE , TRY ... CATCH, etc... ela deixa de existir fora do bloco de código onde foi declarada.
For i = 0 to 10 A variável nome será visível somente dentro do bloco de código definido por FOR/NEXT
Dim nome as String
nome = "Carlos" Se você tentar usar a variável nome fora do bloco vai obter a seguinte mensagem de erro:
Next i
nome="" Name 'nome' is not declared.
No VB 6.0 usando a mesma declaração , a variável nome poderia ser usada dentro da função sem problemas.
No VB.NET
Se você fizer a seguinte atribuição : a = "Copa 2002" não vai obter nenhuma mensagem de erro.
Se você fizer a seguinte atribuição : a = "Copa 2002" vai obter uma mensagem de erro.
Sabe porquê ? Porque a variável a é do tipo de dados Integer e o valor literal "Copa 2002" é considerado do tipo String e isto resultará em tipos
incompatíveis de dados ,ou seja , você não poderá converter String para Integer.
Por outro lado se Option Strict estiver OFF você pode converter entre tipos de dados implicitamente. Veja :
Dim a , b
Quando você não declara as variáveis explicitamente ( não usa a cláusula AS)
a = " Copa "
Se Option Strict for OFF os tipos dados podem ser convertidos
b = 100
a = 2002 na atribuição das variáveis.
5- Inicializando variáveis
Mas você não pode inicializar mais de uma variável , assim : Dim X, Y as Integer = 10
file:///d|/geo_hp/livro_mac1.htm (58 of 85) [01/11/03 18:03:18]
Nova pagina 1
Resumindo : para inicializar uma variável temos que declará-la usando o tipo e a cláusula AS.
Escopo de variáveis
Quando usamos variáveis de memória , constantes e procedimentos dentro do seu aplicativo VB .NET podemos definir o escopo ou visibilidade deles na sua
aplicação.
Ao declarar uma variável dentro de um bloco de código ( for/next , if/then/else ,Select/case , Do/While) a variável será visível somente dentro do bloco de
código na qual foi declarada. Abaixo temos um exemplo de código que mostra isto.
Uma variável declarada dentro de um procedimento somente é visível dentro do procedimento. Somente o procedimento que contém a variável declarada
pode usá-la. Estas variáveis são conhecidas como locais ou estáticas. Você pode declará-las usando a declaração Dim com ou sem a palavra chave Static.
Todos os elementos locais , mesmo se eles forem variáveis estáticas , são privados ao procedimento no qual eles foram declarados . Não podemos declarar
um elemento usando a palavra chave Public dentro de um procedimento.
Sub rotina1()
- Ao executar o projeto o procedimento rotina1() será executado e o valor 200 será atribuído a
Dim varTeste As Integer
variável varTeste (varTeste=200)
varTeste = 200
rotina2()
MsgBox("Valor de VarTeste = " & varTeste) - A rotina2() será chamada e nela uma variável com o mesmo nome é declarada e o valor 2000 é
End Sub atribuído a ela.
Sub rotina2() - O valor da varTeste será exibido em uma caixa de mensagem com o valor igual a 20000
Dim varTeste As Integer
varTeste = 20000
- Ao retornar a execução para o procedimento rotina1() o valor da variável varTeste é exibido com o
MsgBox("Valor de VarTeste = " & varTeste)
valor 200
End Sub
Isto mostra que a variável varTeste tem o seu valor visível somente em cada rotina que na qual foi
declarada , ou seja , ela é uma variável local.
Ao declarar variáveis e constantes a nível de módulo elas serão visíveis por todos os procedimentos dentro do seu código. Para fazer isto você deve declarar
a variável fora de qualquer procedimento que exista no projeto. Geralmente isto é feito depois da linha - Windows Form Designer generated code:
Nota : por conveniência , o termo nível de módulo se aplica a módulos, classes e estrutura . Podemos declarar elementos neste nível colocando a declaração
fora de qualquer procedimento ou bloco dentro do módulo , classe ou estrutura.
Se você declarar uma variável a nível de módulo usando a palavra-chave Friend ou Public ela torna-se disponível para todos os procedimentos do seu
Namespace. Abaixo a variável strTeste pode ser usada por qualquer procedimento do Namespace. Ex: Public strTeste As String
Quando atribuímos um valor de um tipo 'menor' para um tipo 'maior' , como por exemplo , um valor do tipo Short para um tipo Integer o VB .NET realiza a
operação de forma implícita pois o valor do tipo Short pode ser suportado sem problemas pelo tipo Integer. Nestes casos temos uma conversão implícita
('implicit Cast')
Quando ocorre o inverso , ou seja , quando atribuímos um valor de tipo 'maior' para outra de tipo 'menor' , como por exemplo , um valor do tipo Integer
para um do tipo Short o VB.NET vai truncar que não puder ser suportado pela variável de tipo 'menor'. No caso de Integer (representada no VB.NET por 32
bits) para Short (representada por 16 bits) serão descartados os valores acima de 16 bits. Para evitar isto devemos forçar o VB .NET a realizar uma
conversão entre os tipos , uma conversão explícita , também chamada de coersão (cast).
Para realizar uma conversão explícita ou coersão (cast) no VB .NET podemos usar uma das seguintes funções :
Funcão Propósito
ToBoolean Converte um valor para Boolean (True ou False)
ToByte Converte um valor para um Byte (8-bit) no intervalo de 0 a 255
ToChar Converte um valor para um caracter Unicode (2-byte)
ToDateTime Converte um valor para um objeto DateTime
ToDecimal Converte um valor para um Decimal ( 12-byte )
ToDouble Converte um valor para um Double ( 8 byte )
ToInt16 Converte um valor para um Short (2-byte)
ToInt32 Converte um valor para um Integer (4-byte)
ToInt64 Converte um valor para um Integer (8-byte)
ToSByte Converte um valor para Valor com sinal (8-bit) no intervalo -128 a 127
ToSingle Converte um valor para para um Single (4-byte)
ToString Converte um valor para um String
ToUInt16 Converte um valor para um Short sem sinal (2-byte) no intervalo 0 a 65.535
ToUInt32 Converte um valor para um Integer sem sinal (2-byte) no intervalo 0 a 4.294.967.295
ToUInt64 Converte um valor para um long Integer sem sinal (8-byte) no intervalo 0 a 65.535
Para reduzir possíveis erros que podem ocorrer durante uma conversão entre um tipo de menor para um tipo maior , você pode fazer com que o compilador
VB .NET não permita tais atribuições . Para fazer isto basta utilizar a seguinte declaração no seu código VB .NET : Option Strict on
No código :
Também podemos realizar a coerção (cast) usando duas palavras chave para coerção : Ctype e DirectCast que realização a operação para qualquer tipo de
dados.(DirectCast é usada de forma especial nas conversões do tipo Object para qualquer outro tipo.)
CBool | CByte | CChar | CDate | CDec | CDbl | CInt | CLng | CObj | CShort | CSng | CStr
CDbl CInt
A função CDbl converte uma expressão para o tipo Double. A função CInt converte uma valor para Integer.
É utilizada para avaliar uma determinada expressão e definir se um bloco de código deve ou não ser executado. A sintaxe de sua estrutura completa é a
seguinte:
a estrutura na forma mais simples Avaliando uma condição com duas Aninhando duas instruções - If ... Then... Else
possibilidades de execução.
if <condição #1> then
If <condição #1> then [ código #1]
if <condição #1> then [ codigo #1 ] else
[ codigo #1] Else if <condição #2> then
End If [ codigo #2] [ código #2]
End If End If
End If
Além da forma de bloco acima exibida podemos também expressar uma instrução If em uma única linha. Assim :
b- if < condição #1 > then [ código #2 ] Else [ código #3 ] Ex: If hora > 12 then msg="Boa Tarde" Else msg="Bom dia"
Nota: Embora as instruções em uma única linha as vezes possam dar ao código uma melhor aparência (caso a) você dever considerar se a leitura do código
não vai ficar mais difícil.
Existe ainda a instrução IIF que pode ser aplicada em situações em que existam apenas duas ações , uma verdadeira e outra falsa. Sua sintaxe é :
iif ( <condição #1> , < código executado se a instrução for verdadeira> , <código se a instrução for falsa>)
Ex:
Operadores de comparação
Geralmente nas condições usamos expressões de comparação onde duas expressões não booleanas utilizam um operador para realizar uma comparação. Os
operadores disponíveis são :
No caso do operador especial Like podemos comparar uma variável de string com padrões que usam caracteres especiais e comuns. Estes caracteres podem
ser:
Operadores Lógicos
Os operadores lógicos trabalham com expressões ou valores booleanos e retornam um resultado booleano ( Verdadeiro / Falso , Sim / Não ). Nesta categoria
temos os seguintes operadores :
AND Usando este operador entre dois valores/expressões só obtemos um resultado igual a verdadeiro SE os dois forem verdadeiros.
OR Com este operador se um dos valores/expressões for verdadeiro o resultado será verdadeiro
XOR Gera um resultado verdadeiro se um dos valores/expressão for verdadeiro e o outro for Falso.
NOT Operador de negação e retorna o oposto a qualquer valor que for usado com ele.
A seguir temos um tabela com algumas combinações possíveis entre os operadores lógicos.
A estrutura Select Case é usada quando temos que verificar muitas condições , neste caso , embora você ainda possa usar a estrutura If.. Then ... Else ela
poderia se tornar muito complexa e difícil de tratar. Sua sintaxe é a seguinte:
A utilização da instrução Select Case pode simplificar muito o código, abaixo as possibilidades :
Laços
Quando você precisar executar um bloco de código mais de uma vez deverá usar o tipo de instrução laço (loop). Vejamos os principais:
Repete o mesmo bloco de código um determinado número de vezes independente de qualquer condição lógica: Sua sintaxe é :
For <contador = valorinicial > To - contador : variável númerica que controla o número de vezes que o código será executado.
<valorfinal> [step] - ValorInicial - Valor inicial atribuído ao contador
Você usa o laço for/next quando sabe exatamente quantas vezes o bloco de código deverá ser executado.
Para percorrer vetores ou objetos com um número determinado de elementos podemos usar o laço For Each/Next:
O laço For Each...Next é idêntico ao laço For...Next mas executa o bloco de código para cada elemento em uma coleção , ou invés de executar um
determinado número de vezes. Sua sintaxe é :
Os elementos da coleção podem ser qualquer tipo de dados. Para cada interação no laço o VB.NET define a variável elemento para um dos elementos na
coleção e executa o código.
Este laço é mais flexível que o laço for/next . Ele executa o bloco de código enquanto uma expressão booleana for verdadeira.
Nota: No visual basic 6 havia a instrução While/Wend , no VB.NET a instrução Wend foi substituida por End
End While
While.
Ex:
Do ... Loop
Este laço além de ser simples é um dos mais flexíveis , ele executa o bloco de código enquanto uma condição for verdadeira. A sintaxe é a seguinte :
[bloco de código] - <expressão> - qualquer expressão numérica ou de string avaliada pelo laço
Loop
[ código ] [ código ]
Loop Loop
Faça enquanto a expressão for verdadeira Faça até que a expressão torne-se verdadeira
A diferença entre Do While e Do Until é o modo como a estrutura avalia a expressão lógica. Para o Until o bloco será executado enquanto o valor da
expressão for Falsa.
Ao escolher entre um laço While e Until use o laço que não precisar de uma negação na expressão condicional.
Tenha cuidado a posicionar a sua instrução condicional. Se você colocar a condição no início do laço , o código no interior do laço nunca será executado se a
condição não for atendida.
Do
[Código #1}
Nota: se a expressão da condição for Null o VB.NET tratará a condição como False.
Você deve tomar cuidado com o seu código dentro dos laços pois isto pode afeta o desempenho de sua aplicação. Abaixo algumas dicas para ajudar a você
ter um código rápido:
Laço Infinito - Um laço infinito é um laço que executa o código no seu interior e não tem condição de saída , ou seja, o código será executado infinita
vezes...
Dica: Se por um erro de lógica seu código entrar em um laço infinito use as teclas CTRL+Break para encerrá-lo. Abaixo um exemplo de um laço infinito:
Dim i as integer = 0
End While
Recursão
É claro que os laços nem sempre são a melhor solução para todos os problemas. Em alguns casos você pode usar a recursão como uma alternativa aos
laços. A recursão ocorre quando um programa ou rotina chama a ele próprio. Um exemplo clássico para mostrar como a recursão funciona é o cálculo do
um fatorial.
A fórmula para calcular um fatorial de um valor n é = n! onde fazemos n ! = (n -1)(n-2)...(n-(n-1))(1). Assim para o fatorial para o número 5 seria : 5! =
5x4x3x2x1 = 120 . A fórmula geral para calcular o fatorial pode ser então expressa como : n * (n-1) ! ( n multiplicado pelo fatorial de n menos 1).
A seguir temos o código que usa a recursão ao invés de laços para calcular o fatorial de um número inteiro.
entrada = Console.ReadLine()
numero = CInt(entrada)
Console.Write("")
Console.Write(" O valor do fatorial para " & numero & " é : ")
Console.WriteLine(Fatorial(numero))
Console.ReadLine()
End Sub
Shared Function Fatorial(ByVal n As Integer) As Integer
If n = 1 Then
Return 1
Else
Return n * Fatorial(n - 1)
End If
End Function
End Class
Embora sejam conceitos básicos é de suma importância que você compreenda bem as estruturas de controle de fluxo para criar um código robusto e legível.
Para o VB.NET teremos que importar o namespace - System.Math usando a declaração imports ou acessar os métodos a partir da classe Math.
1-)
Funções Gerais
VB 6 VB .NET
Ceiling -
VB 6 VB .NET
VB 6 não possui esta função. Podemos usar o código a seguir: métdo Ceiling shared
VB 6 VB .NET
Exp(valor)
VB 6 VB .NET
Floor -
VB 6 VB .NET
VB 6 não possui esta função. Podemos uar o código abaixo:d métdo Floor shared
Logarítimo
Log(valor as number)
imports System.Math
Log(valor)
ou
imports System.Math
Log10(valor)
ou
imports System.Math
Log(valor, base)
Max -
else
Max = valor2
end if
End Function
imports System.Math
Max(valor1, valor2)
Min -
imports System.Math
Min(valor1, valor2)
else
Min = valor2
end if
End Function
VB Função Rnd
Rnd([numero])
Função Randomize
Randomize([semente])
Retorna um valor double contendo um número aleatório entre 0 e 1 com até 7 casas decimais.
● No VB, Rnd pode tomar um argumento opcional que determina o tipo de números aleatórios retornados:
● Se numero < 0: o mesmo número usando o numero como semente
● Se numero > 0: o próximo número aleatório na sequência.
● Se numero = 0: o número mais recente gerado.
● nenhum valor fornecido: o próximo número aleatório na sequência.
O VB possui a declaração Randomize que realimenta o gerador de números usando a semente para alimentar o gerador.
● Random(), cria uma instância da classe usando o valor da semente baseada na hora atual.
● Random(semente), cria uma instância da classe usando um semente do tipo integer como valor da semente.
Um gerador de números randômicos usa o valor da semente para gerar uma sequência de números pseudo-randômicos. Quando você quer
um novo número randômico , o gerador fornece o próximo número naquela sequência. É por isto que todos os métodos da classe Random
começam com Next.
Método Next
Método NextDouble
myRandom.NextDouble()
método NextBytes
myRandom.NextBytes(myByteArray)
As funções CInt e CLng realizam um arredondamento mas também retorna valores inteiros ou longos.
imports System.Math
Round(valor)
imports System.Math
Round(valor, numerodeDecimais)
valor precisa ser um Decimal ou um double. numeroDeDecimais precisar ser do tipo int.
Sinal de um número
VB 6 função Sgn
Sgn(valor)
imports System.Math
Sign(valor)
Raiz quadrada
VB 6 função Sqr
Sqr(valor as number)
Retorna um double.
imports System.Math
Sqrt(valor)
Retorna um double.
1- Método System.Math.Ceiling
Recebe como parâmetro o número e faz o arredondamento para o menor número entre o número e sua parte inteira. Assim Floor(1.1) irá retornar 1. Faz
um arredondamento para 'baixo'.
Ex:
Resultado
2- Método System.Math.Floor
Recebe como parâmetro um número do tipo Double e retorna o valor arredondado para o maior número entre parte inteira do número e o número. Assim
Ceiling(1.1) irá retornar 2 . Faz um arredondamento para 'cima'.
Ex:
Resultado
3- Método System.Math.Power
Ex:
Resultado
4- Método System.Math.Round
Recebe um número do tipo Double ou Decimal (dependendo de qual método e qual parâmetro você usar) e retorna o valor arredondado mais próximo do
número informado. Assim round(1.49) irá ser arredondado para 1.5 . Se você desejar arredondar usando dois dígitos : round(1.456,2) irá obter 1.46 .
Perceba que o arredondamento leva em conta a casa decimal . Assim round(1.444 , 2) irá resultar em 1.44 enquanto que round(1.446,2) resultará em 1.45.
Overloads Public Shared Function Round( ByVal value As Double, ByVal digits As Integer ) As Double
Overloads Public Shared Function Round( ByVal a As Double ) As Double
Overloads Public Shared Function Round( ByVal d As Decimal, ByVal decimals As Integer ) As Decimal
Ex:
Resultado
Obs: se você importar o namespace no seu código : Imports System.Math não precisará informar todo caminho usado pelos métodos.
Nota : Para arredondar usando o VB 6 você lembra como fazer ? Não ?? veja a função abaixo:
Temp = CDbl(NumeroInformado)
Decimais = 10 ^ CasasDecimais
ArredondaNumero = (Fix((Temp + 0.5 / Decimais) * Decimais)) / Decimais
End Function
A opção Option Strict é nova , e foi implementada no VB.NET ; usando a opção Option Strict evitamos os erros em tempo de execução que se originam de
conversões automáticas de variáveis. Assim , na conversão de uma variável do tipo Int32 para o tipo Int16 ocorre um estreitamento que pode ou não dar
certo pois podem existir valores que ao serem convertidos para int16 percam a precisão. Se você trabalhar com a opção Option Strict desativada , o VB
vai deixar você tentar , se der certo muito bem se não der ....
Vamos a um exemplo :
troca = NumeroMaior
NumeroMenor = troca
End Sub
O VB não vai reclamar e não indicará erro neste código seu projeto vai rodar bem até que você tente fazer a conversão de um número maior que 32.767 , ai
sim vai ocorrer um erro na sua aplicação...
troca = NumeroMaior
NumeroMenor = troca
if NumeroMaior > NumeroMenor.Value then
MessageBox " Atenção ! Este número não suporta a conversão "
else
NumeroMenor = Ctype(troca, Int16)
endif
End Sub
End Sub
Com a opção Option Strict ativada , a coisa muda de figura. Durante a fase de projeto o VB.NET irá sublinhar o código e será gerado um erro em tempo de
compilação. O VB.NET não permite a você usar o código sem fazer a modificação explícita ( manual ) . Você é avisado em tempo e pode ajustar o seu
código.
1. Clique com o botão direito do mouse no seu projeto na janela Solution Explorer
2. Selecione Properties
3. Na opção Common Properties selecione a opção Build (veja figura abaixo)
Pronto ! seu projeto já esta imune a erros de conversão forçada e a variáveis que surgem do nada....
Agora vamos falar da opção - Option Compare - ela é usada a nível de arquivo para declarar o método de comparação padrão que será usado quando da
comparação de dados string. A sintaxe é :
Binary
Resulta em uma comparação de strings baseada na ordem derivada da representação binária interna dos caracteres.
Text
Resulta em uma comparação de strings baseada na ordenação case-sensitive determinada pela configuração local do sistema.
Para usar Option Compare devemos fazer a declaração antes de qualquer outra instrução. O método de comparação de strings é definido para uma classe ,
módulo ou estrutura . O valor padrão para a comparação de textos é o valor Binary.
Lembre-se que no Windows a ordem da ordenação é determinada pela página de código. A seguir vemos um exemplo que usa Option Compare Binary , o
que produz uma ordenação binária.
A<B<E<Z<a<b<e<z<À<Ê<Ø<à<ê < ø
Quando os mesmos caracteres são ordenados usando - Option Compare Text , a seguinte ordem é produzida:
(A=a) < ( À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)
Para encerrar vejamos um exemplo que usa Option Compare para definir o método padrão de comparação de strings.
A Passagem de parâmetros
Você lembra como era a passagem de parâmetros para funções/ procedimentos no VB 6.0 ??? Esqueceu ???
No VB 6.0 quando passamos um parâmetro , se não for definido se o parâmetro é passado por valor - ByVal - ou por referência - ByRef - o VB assume como
padrão que o parâmetro vai ser passado por referência (ByRef).
Você se lembra que quando passamos um parâmetro por referência o parâmero pode ter o seu valor alterado dentro da função/procedimento chamada. ?
Deve lembrar também que isto pode trazer muitas dores de cabeça para você ...
Quer ver o porque ??? Então estudo o código abaixo e responda a seguinte pergunta :
x = 10
y = Passa_Parametro_Por_Referencia(x)
MsgBox " y é igual a " & y & vbCrLf & " x é igual a " & x, vbCritical, "Passagem de parametros
ByRef"
End Sub
valor = valor + 10
Passa_Parametro_Por_Referencia = valor
End Function
Isto acontece por que quando passamos a variável A como parâmetro para a função o VB 6.0 passou o parâmetro por
referência , visto que não informamos nada a respeito.
No VB.NET não temos este problema por que o padrão da passagem de parâmetros no VB.NET é sempre Por Valor (ByVal)
O mesmo código acima executado no VB.NET irá retornar para a variável X o valor igual a 10. Ou seja o valor original da variável X é mantido após a
chamada da função...
Se você criar um novo projeto VB.NET e procurar as extensões acimas citadas não vai encontrar... Mudou tudo... Vamos ver quais as novas extensões de
arquivos criados no VB.NET :
.vbproj , .vbproj.user - arquivos de projeto do Visual Basic .NET ( corresponde ao arquivo vbp)
.vb - arquivos de código Visual Basic .NET. Pode conter forms ,módulos , classes, etc.
.sln - arquivos de solução ; pode conter um ou mais projetos.
.suo - arquivo relacionados a solução ; guarda opções personalizadas da sua solução. (Solution User option)
.obj , .o - arquivos objeto compilados e não linkeditados usados na depuração
.pdb - arquivo de banco de dados de depuração e da situação do projeto (criado com a opção /debug)
.resx - arquivo de recursos em formato XML
- gerado e atualizado automaticamente pelo Windows Forms Designer toda vez que um controle licenciado é colocado no
.licx formulário.
- Manifesto da Assembly. Arquivo associado por padrão a todo projeto VB.NET que contém metadados com informações sobre
AssemblyInfo.vb
a assemblies do projeto.
Os arquivos de módulo (.bas ) , de classes (.cls) e forms recebem agora a mesma extensão : .vb pois possuem todos o mesmo formato geral com a nova
orientação a objetos do VB.NET.
Assustado com as novas extensões ??? Calma , em geral um projeto simples no VB.NET será composto apenas por arquivos .vbproj e arquivos .vb.
Lembra do velho BASIC que usava número de linhas para onde podíamos desviar uma instrução ? Pois é , o VB.NET também permite usar número de
linhas no seu código. Vamos mostrar como fazer isto :
Embora possamos ativar a numeração de linhas no código , não podemos incluir diretamente novos números nem alterar os existentes.
Quer um motivo para usar número de linhas ? Que tal personalizar uma mensagem de erro que retorne o número da linha onde o mesmo ocorreu ?