Desenvolvimento - Visual Basic .NET

Usando Array no VB.net

Este artigo mostra as vantagens e a utilização de array em VB.net.

por Jonas Chaves



O que são arrays?

As arrays são variaveis que armazenam suas informações em uma ou mais dimensões, cada coleção recebe um inteiro como identificador no qual mostrara o valor da array maquela posição. Isso é muito parecido com Matriz, seja ela uni-dimensional ou bi-dimensional.

As arrays são tambem conhecidas como de vetor ou lista caso seja uni-dimensional, ou Matriz quando a mesma for bi-dimensional.

Ao contrario da linguagem C em que a mesma aparece sendo usada como Lista, Pilha e Fila. Usamos em VB.net como Lista, não que não possamos usar como na linguagem C, uma vez que a funcionalidade se mantem, mais a forma como é tratada em nosso codigo é diferente  visto que seguem uma estrutura diferente em cada situação.

    

Pilha

O primeiro que entra é o ultimo que sai, conhecido como FILO (first in last out) ou o ultimo que entra é o primeiro que sai LIFO (last in first out)

Fila

O primeiro que entra é o primeiro que sai, conhecido como FIFO (first in first out)               

Lista

Pode ser retirado e inserido em qualquer posição não sendo necessario retirar os elementos de suas posições

Caso deseje usar estas estruturas como em C utilize as classes Stack e Queue

      Queue = Quando desejamos trabalhar com Fila

      Stack = Quando se deseja trabalhar com Pilha

Além das classes acima podemos usar as classes CollectionBase. Usada para se retornar um nome mediante a um Indice ou Chave. Alem de muitas outras classes que veremos mais a fundo em outra oportunidade.       

Neste tutorial estaremos trabalhando com as Arrays como Lista, assim denominada quando a temos de forma uni-dimensional.

Para criarmos um array é simples:

Dim Nome(tamanho) as TextBox

Onde:

Tamanho = Quantidade de espaço alocado, ou seja o numero de elementos que formarão nossa array.

Nome = Nome da variavel. Pode ser Maria(tamanho), Jose(tamanho) etc...

Algumas pessoas em muitos sites citam as arrays como um mal desnecessario. Muitos chegam a dizer que não encontram utilidades na sua utilização.

Um exemplo bastante simples de ser mostrado e funcional seria na utilização das arrays quando trabalhamos com BD.

Imagine ter que ficar setando os controles, um por um, ninguem merece. Acho que por isso a medida que descobrimos os codigos acabamos querendo fazer tudo por ele, pois setar componentes do form alem de demorado é chato não acha ?

Uma alternativa para esse sofrimento seria utilizar um pequeno trecho de codigo que com certeza fara com que sua produtividade aumente bastante.

Uma vez feito podera adapta-lo em uma classe e adeus dor de cabeça.

Veja o seguinte trecho de codigo abaixo:

   txtCelular.Text = vbNullString

        txtCidade.Text = vbNullString

        txtEndereco.Text = vbNullString

        txtEmail.Text = vbNullString

        txtCodID.Text = vbNullString

        txtNome.Text = vbNullString

Não acha que seria mais facil utilizar a array e fazer da forma abaixo:

Dim txt(5) As TextBox = {txtCelular, txtCidade, txtEndereco, txtEmail, txtCodID, txtNome}

For i=0 to 5

     txt(i).Text = vbNullString        

Next

Agora imagine umas 30 caixinhas de texto. Se estivermos utilizando codigo puro a tendencia é usarmos esse loop para inserirmos dados, excluirmos dados, alterarmos dados de forma pratica e rapida. Sem contar que economizamos varias linhas de codigo.

Veja um exemplo de uma Rotina para mostrar os dados em nossos forms:

Private Sub Mostrar()

For i=0 to 30

   Txt(i).Text = DataS.Tables(“Tbl_Cliente”).Rows(p)(i).ToString

Next

End Sub

Private Sub cmdPrimeiro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPrimeiro.Click

        p = 0

        Call Mostrar()

End Sub

Array Dinamica

Um dos grandes problemas em se trabalhar com Arrays com tamanhos definidos é que a mesma passa a ser limitada, visto que o usuario não tem como exceder esse limite. Com isso utilizamos o ReDim que altera o tamanho da array em RunTime, mais não altera usa dimensão.

Para usarmos o ReDim procedemos da seguinte maneira:

Dim P As Integer = 0

Dim n() As String

Private Sub BtnArray_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click

        ReDim n(P)

        n(P) = P "Atibui a array o valor do contador P

        TextBox1.Text = n.Length "Mostra o tamanho de nossa array

        P += 1 "Contador

End Sub

Ao utilizar o ReDim é muito comum utilizar Preserve após seu nome, isso porque cada vez que o ReDim é acionado nossa lista de array é apagada, e isso causara um erro ao nosso sistema.

Teste o exemplo abaixo em seu computador:

Dim n() As String

    Dim p As Integer = 0

    Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click

        ReDim Preserve n(p)

        n(p) = "Jonas Chaves " & p

        For i = LBound(n) To UBound(n)

            ListBox1.Items.Add(n(i))

        Next

        p += 1

    End Sub

Se voce retirar o Preserve e rodar sua aplicação vera que causara um erro.

Por este motivo que se faz necessario o uso do Preserve, exatamente para preservar o valor de nossos dados salvos em nossa array.

Array bi-dimensional

Alem de trabalharmos com array uni-dimensionais temos a necessidades de utilizarmos arrays com mais dimensões, seja ela com 1,2,3,4...n  dimensões.

Sua utilização é bastante semelhante as  arrays uni-dimensionais. Vejamos um exemplo de array bi-dimensionais

 

    n(0, 0) = "Jonas"

        n(0, 1) = "Joel"

        n(1, 0) = "Joas"

        n(1, 1) = "Joabe"

        For Me.i = 0 To 1

            For Me.p = 0 To 1

                ListBox1.Items.Add(n(i, p))

            Next

        Next

As arrays uni-dimensional são muito semelhantes a forma como trabalhamos com o Excel. Sua posição é identica ao modo como localizamos  a posição de um valor na cedula.

0

1

2

0

Jonas

Joas

Joel

1

Jorge

Joana

Joelma

0,0 = Jonas   0,1 = Joas   1,0 = Jorge   1,2 = Joelma

Se fossemos trabalhar com array tri-dimensionais usariamos o mesmo sistema, porem teriamos uma posição a mais.

Array dentro de Array

Uma outra possibilidade de se usar array seria a de ter uma array de array. Imagine que tivessemos duas arrays, uma de Nome Pessoa que contem o nome de 2 pessoas e outra de nome Idade que contem as idades dessas pessoas.

Em seguida imagine que seja necessario juntar as informações das 2 arrays numa so. Nesse caso não sera necessario criar um novo codigo ou fazer magica no mesmo. Basta apenas criarmos uma nova array bi-dimensional como no exemplo abaixo e atribuir a ela o valor das arrays Pessoa e Idade como abaixo.

   Dim Pessoa() As String = {"Jonas", "Joel"}

        Dim Idade() As String = {"10 anos", "30 anos"}

        Dim NomeCompleto()() As String = {Pessoa, Idade}

        Dim i, p As Integer

        For i = 0 To 1

            For p = 0 To 1

                ListBox1.Items.Add(NomeCompleto(i)(p))

            Next

        Next

Ubound e Lbound

Além do ReDim um complemento utilizado na utilização das arrays é o Lbound e Ubound

O Lbound mostra o primeiro indice da array ou seja o menor indice que se encontra na mesma, ao contrario do Ubound que nos mostra o maior indice.

Com isso poderiamos utilizalos em um loop no qual saberiamos qual seria o indice inicial e final de nossa array

For i=Lbound(array) to Ubound(n)

      ListBox1.Items.Add(n(i))

Next

Length

O length por sua vez nos voltara o tamanho de nossa array. Isso funciona da mesma forma que utlizamos para saber o tamanho do nome de uma pessoa.

Ex: Me.text = n.lenght

GetValue

O GetValue nos informa mediante ao índice passado qual o valor que aquela posição guarda.

Me.Text = n.GetValue(0)

Rank

Nos mostra o numero de dimensões de nossa array

Ex: Me.text = n.Rank

Clear

Usamos o clear para limpar nossa array o que por sinal deve ser feito para limparmos nossa memoria, após o uso do nosso aplicativo ou quando necessario.

Para que uso aconteça utilizamos a classe Array para executar esta tarefa.

Array.Clear(N,T,Y)

Onde:

N= Nossa array

T=  Posição de onde ira começar

Y = Tamanho de nossa array

Veja que nos valores que deverão ser passados em T e Y poderiamos usar Ubound e Lbound.

Array.Clear(n, Lbound(n), Ubound(n))

Jonas Chaves

Jonas Chaves - Formado como técnico em Visual Basic e bacharel em sistemas de informação.
Atua na área de Acessória e Desenvolvimento de software para empresas de diferentes setores, alem de ministrar aulas de Visual Basic 6, ASP, Visual Basic.net 2008 e Segurança em Redes.
Jonas Chaves trabalha atualmente nas linguagens: ASP, Visual Basic 6 e Visual Basic.net 2008.