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.

Os Módulos no VB .NET  2005

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 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

Você pode debugar uma aplicação que usa argumentos de linha de comando a partir do Visual Studio informando a linha de comando na página Debug do descritor My Project.

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:


José Carlos Macoratti

 

1