VB .NET - Uma palavra sobre Módulos
Os módulos da linguagem Visual Basic fornecem uma maneira simples de testar pequenos trechos de códigos. Em aplicações de produção os módulos são menos usados do que as classes mas não deixam de ter sua utilidade para ilustrar conceitos importantes.
Como as classes e os formulários os módulos são definidos em arquivos fontes que possuem a extensão .vb. Isto pode confundir quem esta migrando do VB6 onde havia pelo menos 6 extensões diferentes (.frm , .bas , .cls , etc.). Como não há diferenças significativas entre módulos , classes e formulários no mundo .NET agora esta tudo resumido apenas a extensão .vb.
Você pode até ter dois módulos ou duas classes no mesmo arquivo fonte, e você ainda pode misturar em um mesmo arquivo classes e formulários.
Na teoria, você pode ter múltiplos formulários em um mesmo arquivo, neste caso o Visual Studio pode exibir somente um desses formulários em tempo de desenho. Na prática creio que você não vai querer ter mais do que um formulário (outra classe que possui um descritor associado) no mesmo arquivo fonte, mas não custa avisar que o recurso existe.
Você usa um módulo para criar um container para variáveis, procedimentos e funções usadas em toda a aplicação , e, em alguns casos, para fornecer o método que funciona como um ponto de entrada para a aplicação.
Sintaticamente falando , um bloco de módulo esta delimitado pelas palavras chaves Module e End Module e podem conter constantes públicas ou privadas, campos, propriedades e métodos.
Vejamos a seguir um exemplo de um código usando Módulo:
Module funcaoMatematica ' Uma constante pública Public Const dobroPI As Double = 6.28318530717958 ' dois arrays privados Private nomes() As String Dim valores() As Double ' Uma função pública que retorna o fatorial de um número Public Function Fatorial(ByVal n As Integer) As Double Dim resultado As Double resultado = 1 For i As Integer = 1 To n resultado= resultado* i Next Return resultado End Function End Module |
No código acima, o uso da palavra chave Public faz com que a constante dobroPI e a função Fatorial serem visíveis em toda a aplicação. Você poderia até omitir a palavra-chave Public na função Fatorial pois métodos são sempre públicos a menos que você determine de outra forma.
O método Main é o ponto de entrada pra todas as aplicações do tipo console e opcionalmente para as aplicações do tipo Windows forms. Na sua forma mais simples o método Main é um procedimento do tipo Sub que não usa argumentos.
Module
Main Sub Main() Dim resultado As Double = Fatorial(10) Console.WriteLine(resultado) End Sub End Module |
Podem ocorrer problemas se sua aplicação possui dois ou mais módulos contendo o método Main. Neste caso você pode dizer ao VB qual módulo é o principal selecionando o objeto de partida (startup object) na página Application do descritor do projeto My.
Se somente um módulo no projeto contém o método Main , você pode simplesmente selecionar o elemento Sub Main a partir da combobox e deixar o VB encontrar o módulo correspondente para você.
Por padrão os projetos do tipo Windows Forms não precisam de um método Main pois você pode designar um formulário como ponto de partida da aplicação. Na versão 2005 você pode até implementar características tais como tela de apresentação e estilo Visual Windows XP sem escrever uma única linha de código apenas usando o mouse.
Em alguns casos porém você desejará ter mais controle sobre o que esta acontecendo quando a aplicação é iniciada ou se recusa a roda se certas pré-condições forem encontradas.
Nestes casos você poderá exibir a página da aplicação do descrito My Project, verificar se a opção Enable Applicaton Framework não esta selecionada, selecionar o elemento Sub Main na combobox Startup Object e definir via código o método Main .
Module
Main Sub Main() InicializarObjetos() Application.Run(New MainForm) End Sub End Module |
O método Main pode usar argumentos e mesmo retornar um valor, duas características úteis quando você escrever aplicações que serão iniciadas a partir da linha de comando. Para processar argumentos de linha de comando você declara o método Main que usa um array de strings:
' Exibe a soman de números passados na linha de comando. Sub Main(ByVal args() As String) Dim resultado As Double For i As Integer = 0 To UBound(args) resultado = resultado + CDbl(args(i)) Next Console.WriteLine(resultado) End Sub |
Observe que a sequência de
caracteres no interior de aspas dupla é considerado um único argumento na linha
de comando.
Aplicações que são
desenhadas para rodar a partir de um arquivo de lote retorna um código de erro ,
o qual o arquivo de lote pode testar por meio de uma instrução IF
ERRORLEVEL.
Neste caso você precisa implementar o método Main como uma Função que retorna um inteiro :
' Exibe a soman de números passados na linha de comando. ' retorna ERRORLEVEL=1 Se houver qualquer erro. Function Main(ByVal args() As String) As Integer Try Dim resultado As Double For i As Integer = 0 To UBound(args) resultado = resultado + CDbl(args(i)) Next Console.WriteLine(resultado ) Return 0 Catch ex As Exception Console.WriteLine("Um ou mais argumentos são inválidos") Return 1 End Try End Function |
O tratamento de erros feito pelo bloco try/Catch protege contra erros não previstos tais como um dos elementos no array args não poder ser convertido para um número; caso isto ocorra o bloco captura a exceção retornando à execução.
O método Sub New
Um módulo também pode incluir um procedimento especial chamado Sub New. Este procedimento será executado antes qualquer outro código no módulo e pode ser usado para iniciar campos públicos e privados usados por outros métodos no módulo.
Usando o exemplo do código FuncaoMatematica que calcula o fatorial podemos incluir o método Sub New para calcular os valores do fatorial para uma certa faixa de valores de forma antecipada, de forma que quando a função Fatorial for chamada ela retornará os valores já calculados pelo método Sub New.
Module
FuncaoMatemtaica Private resultadoFatorial(100) As Double Sub New() resultadoFactorial(0) = 1 For i As Integer = 1 To 100 resultadoFatorial(i) = resultadoFatorial(i - 1) * i Next End Sub Public Function Fatorial(ByVal n As Integer) As Double ' Lança uma exceção fora da faixa [0,100]. Return resultadoFatorial(n) End Function End Module |
O acesso a constantes é realizado antes do método Sub New pois elas são resolvidas em tempo de compilação e agregadas ao código.
Até breve...
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: