Primeiras aulas do curso VB.NET com Windows Forms Parte 7: Arrays e Tipos genéricos

VB.NET com Windows Forms Parte 7: Arrays e Tipos genéricos

Conhecendo arrays - Introdução

Oi, meu nome é Victorino Vila, e bem-vindo a mais um treinamento de Visual Basic .net. Esse treinamento faz parte de toda uma sequência de treinamentos, onde a gente percorre os principais pontos desta linguagem de programação associada ao .net framework.

Nessas aulas específicas deste treinamento, nós iremos falar sobre a arrays e listas. Inicialmente, nós vamos falar sobre a estrutura de array e olhar, por exemplo, dentro do Visual Basic, como é que eu declaro um array e como é que eu atribuo valores a eles.

É claro que nós vamos entender, primeiramente, o quê que é um array, que é uma estrutura sequencial onde eu posso colocar valores. Veremos também que no caso dos nossos arrays, eu posso também estar inicializando ele de uma maneira direta.

Dentro do Visual Basic o array tem que ser previamente definido o seu valor inicial, o número de casas que ele vai ter. Essa definição pode ser feita na declaração ou então no momento da inicialização.

Porém, ao ser definido, o array tem um tamanho fixo e constante e isso pode não ser vantajoso, pode nos dar problemas dependendo do tipo de estrutura que eu queira trabalhar.

Por isso a gente vai partir para uma coisa um pouquinho mais complexa, que é a lista, e nós vamos estar criando uma classe específica ,chamada lista de contas correntes.

Onde nós iremos colocar dentro de um array uma série de classes do tipo conta corrente, lá do nosso banco bytebank, sem nos preocuparmos, inicialmente, com o tamanho original do array.

Será uma lista que vai ter um tamanho flexível tanto para aumentar quanto para diminuir. E, claro, na implementação dessa lista nós iremos ver várias características.

Primeiro o quê que é o indexador dentro de uma classe? É uma estrutura especial, que a gente, inclusive, declara ela de uma forma diferente. Nós iremos ver dentro dessa nossa classe como é que eu passo parâmetros de forma opcional, ou seja, parâmetros que eu não sou obrigado a passar dentro de um método ou de uma função.

E nós veremos, claro, uma série de métodos que vão manipular os nossos arrays, como, por exemplo, o método adicionar, o de verificar a capacidade máxima do array, e, é claro, o método por exemplo de remover.

Também vamos falar um pouquinho dentro dessa classe lista de contas correntes, nós iremos ver como é que eu posso, por exemplo, passar como parâmetro um conjunto de valores que serão transformados dentro da função ou método em um array.

E também veremos aqui o uso de uma estrutura que pode substituir de maneira muito mais eficiente o nosso for, que é o for each.

Então, isso que nós veremos através dessa nossa lista de contas correntes. E ela vai resolver uma série de problemas que o array nos trará. Só que nós vamos nos deparar com uma outra necessidade.

Porque não somente eu vou precisar criar listas de contas correntes, mas eu posso querer criar lista de outros tipos, como, por exemplo, listas de inteiros, listas de strings, ou listas de outras classes.

E nós veremos que se a gente construir uma outra classe que vai trabalhar, não um tipo específico, mas como objects, eu consigo ter também uma forma genérica de criar listas mais flexíveis.

Mas a gente vai ver também que, apesar do ganho em estar usando a lista de object, nós também ainda temos um problema que o compilador não vai conseguir, por exemplo, distinguir listas que vão ter tipos diferentes.

Quando a gente cria uma lista de um tipo a gente quer que os elementos desse array internos a essa lista sempre tenham um mesmo tipo. E pela lista de objects o nosso compilador não vai conseguir tratar isso.

Então nós vamos ver como a gente resolve esse problema através das listas de tipos genéricos. Esta sim vai tratar os nossos tipos de maneira genérica, através da substituição de um parâmetro, que nós vamos chamar inicialmente da letra T, que vem de Type, que vai substituir pelo tipo que aquela lista vai ter.

Enfim, nós vamos ver várias coisas nesse treinamento. Obrigado, então, por você ter escolhido ele, estar assistindo. E vamos seguir em frente, espero que vocês gostem. Um grande abraço.

Conhecendo arrays - Conhecendo os arrays

Tudo bem, gente? Vamos continuar mais um treinamento de Visual Basic. No link anterior a este vídeo vocês devem baixar para máquina de vocês o nosso projeto inicial. Esse projeto inicial vai ter todas aquelas classes no nosso banco byte bank, que nós construímos nos cursos anteriores.

Mas para a gente não tem que construir um novo projeto, ter que de novo incluir todas as classes, já temos o link aqui para que você baixe na sua máquina e possa já abrir o projeto no status inicial.

Então, eu baixei o arquivo aqui dentro do diretório byte bank. Nós vamos ter lá a nossa solução. Eu vou chegar aqui nessa solução e abrir o meu Visual Studio.

Então vou ter aqui um projeto já com formulário principal montado e temos aqui dois projetos: o sistema agência, onde nós temos aqui o nosso formulário e uma classe local chamada estagiário, e lá no nosso byte bank bibliotecas, temos aqui as nossas conhecidas classes, que nós já trabalhamos nos outros cursos de Visual Basic. A classe, por exemplo, de gerenciador de bonificação, a interface e a autenticavel, temos aqui a classe cliente, conta corrente e assim por diante.

Vamos, então, começar nesse formulário vindo aqui no programa do clique do botão. Digamos, por exemplo, que eu queira criar aqui uma variável do tipo inteira para receber uma idade. Isso nós já aprendemos lá no nosso primeiro curso de Visual Basic. Eu venho aqui "Dim Idade_1 As Integer", e vai receber, por exemplo, um valor 30.

Mas eu não quero apenas uma idade, eu quero também uma segunda idade. Bem, eu vou criar uma segunda variável "Idade_2 As Integer", e vou colocar aqui um valor qualquer. Mas eu quero mais uma idade, não somente mais uma idade, mas eu quero mais três idades.

Eu posso vir aqui colar mais três vezes, é claro que o compilador não vai deixar eu manter o mesmo nome para essas novas variáveis. Então eu vou vcolocar aqui, por exemplo, idade 3, idade 4, idade 5. E vou colocar aqui outros valores, 25, por exemplo, 45 e mais unidade aqui 32.

Mas não satisfeito eu gostaria de saber a média aritmética dessas cinco idades. Então eu vou criar aqui uma variável chamada média. Normalmente, média ela não vai ser inteira, porque eu vou dividir, pode ser, por exemplo, um Double.

Que vai ser o que? Eu preciso somar as minhas idades e dividir pelo número de variáveis que eu estou somando. É assim que eu faço uma média aritmética.

Então eu vou lá, idade 1 + idade 2 + idade 3 + idade 4 + idade 5. Isso aqui vou dividir pelo número de idades, que é 5. Então eu tenho a minha média.

E, claro, se eu quiser visualizar isso na tela, eu boto aqui no Msgbox e consigo ver a média das minhas idades. Vamos somar aqui, vamos executar e ver o que vai acontecer. Então está lá a média 30.4.

Mas agora imagina: eu calculei a média dessas cinco idades, mas de repente me vieram dizendo "olha, eu quero mais uma sexta idade para poder calcular a minha média". O que eu tenho que fazer? Eu tenho que criar então mais uma variável para receber a a sexta a idade.

Eu vou colocar aqui, por exemplo, 31. Não satisfeito isso, eu tenho que colocar na minha soma mais uma idade, a idade 6, e, ainda, tenho que vir aqui e dividir de seis. Ou seja, tive que mexer bastante no meu código, só porque entrou uma idade nova. Não tá muito legal isso não.

Seria interessante que eu pudesse, por exemplo, ter alguma coisa do tipo "For 1 As Integer = 1 to 6". E dentro desse link eu tenho um looping. E eu terei aqui um média recebe a soma de idade. No caso aqui, entre parênteses o meu "I", por exemplo.

Porque eu tenho aqui seis idades. Então, por exemplo, na primeira soma eu pegaria a idade 1, a idade 2, a idade 3 até a idade 6. E depois aqui um média, eu diria que seria o média dividido pelo seis. Fica até mais fácil.

Mas note que ele não tá deixando aqui eu fazer isso. Então esse for fazendo esse tipo de looping também não é uma boa solução, não que não seja uma boa ideia, mas porque o compilador não me deixou fazer isso.

Bem, vamos fazer o seguinte, vamos supor que, ao declarar uma variável idade, por exemplo, se eu declaro ela como inteiro eu faço assim. Mas vamos supor que eu coloque aqui dentro um parênteses, abre e fecha parênteses. Note que, ao fazer isso, o compilador ele não me deu erro.

Bem, mas o que eu faço com essa estrutura que eu chamei de idade com esse abre e fecha parênteses aqui? Eu posso fazer isso aqui, idade e aqui dentro do parênteses eu coloco o número 1, eu vou dizer que é igual, por exemplo, a 30.

Na verdade, eu vou até aproveitar essa estrutura que tá aqui embaixo e vou fazer assim. Então, por exemplo, idade 2 = 30, idade 3 recebe o nosso 25, idade 4 recebe o 45, e o meu idade 5 recebe o 32, e o meu idade 6 recebe o 31.

Ao fazer isso, eu estou, como se tivesse dentro dessa variável, criando seis idades diferentes. Invés de ter uma variável para cada idade, eu tenho uma única variável.

Essa variável nós chamamos de array, então é como se fosse um vetor, como se fosse uma estrutura com várias casas, e dentro de cada casa eu vou colocando o valor dela.

Então é um array, por exemplo, com 6 posições, como eu estou vendo aqui, é como se tivesse seis variáveis separadas.

E, claro, a minha referência que eu teria para fazer a média seria me referenciar direto com a variável, abre parênteses, o número do índice, fecha parênteses.

Então vou colocar aqui idade 3, idade 4, idade 5, idade 6. E eu vou poder ter lá a minha média. Vamos ver se vai funcionar isso aqui. Eu vou salvar, vou executar, não deu nenhum erro de programação.

E note, ao fazer isso daqui, ele já me deu um erro aqui dizendo que idade 1 eu não poderia estar inicializando com o valor 30. Mas por que isso? Por que isso aconteceu? Primeiro porque, note, ao declarar a variável idade eu não disse de ante-mão quantas casas aquela variável iria ter.

Como eu tenho aqui seis casas eu vou colocar aqui dentro o número 6. Note até que aquele warning, aquele alerta que eu tinha na idade 1 sumiu.

Então estou dizendo o seguinte "ollha, estou criando um array de 6 posições". E na primeira posição você coloca o 30, na segunda o 20, na terceira o 25, na quarta o 45, na quinta o 32, e, na última, finalmente, você coloca o 31. Então pronto, eu já tenho meu array preenchido.

Então eu vou salvar, eu vou executar e vou clicar aqui. Note que, agora eu tenho ali a minha média calculada. Então eu tenho aqui a minha estrutura chamada de array. Tudo bem?! É isso aí gente.

Conhecendo arrays - Posições do array

Bem, olhando então essa estrutura de array, isso me lembrou um negócio que nós já vimos no nosso treinamento de Visual Basic. Foi quando a gente viu caracteres.

Se lembra que quando, por exemplo, a gente chegou e fez isso aqui "vString As String = "123456"", assim não, vamos botar assim, "01234567". Isso é um string. E, por exemplo, a gente viu a seguinte coisa "vTamanho As Integer = vString.".

Por exemplo a gente viu aquele length, que é o tamanho do string, e também a gente chegou a ver aquele indicador de buscar alguém de dentro do substring.

Então "vCaracter As String =", por exemplo, "vTamanho.Substring", tamnaho não, "vString.Substring". E vocês se recordam o nosso string ele começa na posição zero. Então eu vou botar aqui zero e um caractere.

Então se eu aqui executar esse formulário eu vou colocar aqui um break-point nessa primeira linha, e quando eu clicar em "clique aqui" eu tenho lá o meu string values "01234567".

O tamanho dele são oito posições, porque a posição zero é uma posição. E o meu primeiro caractere é o caractere zero. Então note, o meu string tem oito posições e eu vou contando dele de zero a sete.

Levando em consideração então que a posição zero de um caractere é o primeiro digito, por que que a posição 1 é a primeira do array? Será que se eu colocar 0 também funciona? Então vamos fazer o seguinte teste: eu vou pegar isso daqui, vou colar aqui embaixo. Vou até apagar esse exemplo, que eu só fiz para a gente poder relembrar como é que se organiza um string.

Eu vou pegar aqui uma variável chamada idade 2, colocar o 2 aqui na frente para poder diferenciar este array deste array. E a minha média 2 vai ser, é claro, isso daqui. Só que aqui, em vez de 1, eu vou colocar o 0, depois o 1, depois o 2, depois o 3, depois o 4 e depois o 5. Então vamos ver o que vai acontecer.

Note que não tive problema de compilação. Eu vou colocar aqui um break-point, na verdade aqui embaixo, porque esse primeiro trecho do programa a gente já validou no vídeo anterior, e vou executar.

Então tem a minha média aqui 30.5. Eu vou começar a preencher um vetor igual de 6 posições, só que começando na posição zero. Note que engraçado, ele não deu erro. E a minha média... Na verdade vamos ver quanto é que deu a média.

Note: a minha médica deu 25.5. É que na verdade aqui, deixa eu parar, a gente teria que colocar aqui o zero, 0, 1, 2, 3, 4 e 5. Eu vou aqui exibir o média e o média 2. Pronto. E a gente vai ver o que vai acontecer. Agora sim é teste correto.

Tô calculando a média a partir da posição 0 até a posição 5, o vetor tem seis posições. A mesma coisa aqui. Só que eu tô começando o meu array, invés de um, na posição a posição zero.

Por que eu fiz isso? Porque eu meio que copiei como é que o Visual Basic trabalha com os strings. Então ele não deu erro. Vamos ver o que vai acontecer. 30.5 e 30.5. Tudo bem, entendi.

Eu posso criar um vetor de 6 posições, começar a da 1 a 6 ou da 0 a 5, os dois têm 6 posições e funciona. Mas, poxa vida, como é que eu vou saber como é que eu vou trabalhar com um ou com outro? Meio confuso.

Bem, mas vamos analisar com mais cuidado que tá acontecendo. Eu vou dar um break-point na linha 17 e vou rodar de novo. Vou criar aqui um vetor, um array de 6 posições, porque eu tenho seis aqui.

Eu cliquei aqui. Até aí tudo bem. Mas note uma coisa, se eu pegar o mouse e colocar sobre a declaração, note que eu tenho um negócio ali dizendo, olha só, tamanho 7.

Mas eu coloquei o número seis dentro do parênteses, como é que ele vai ter tamanho 7? Se eu abrir aqui eu consigo ver quantos elementos o meu array tem.

E, olha lá, ele tem sete elementos, ele não tem 6 elementos. Sete elementos, que começa na posição 0 e vai até a posição 6.

Então quando eu chegar até aqui no final, vou executar, parei aqui lá no média. Se eu colocar de novo meu mouse sobre a declaração do vetor idade de 6 posições, note que eu vou ter o seguinte: a posição 1, na verdade, é a segunda posição do meu array.

Eu tenho 30, 20, 25, 45, 32 e 31 da posição 1 à posição 6. Mas o meu array ele tem sete posições e não seis. Apesar de colocar aqui seis, ele tem sete posições. E começa da posição 0 à posição 6.

Vamos ver o segundo lá, o de baixo, ele também tem sete posições. E depois de eu inicializar este novo array, note que as minhas posições ficaram da posição 0 à posição 5 com valores, e a posição 6 zerada. E claro, média vai dar a mesma, porque eu estou inicializando com os mesmos valores.

Bem, o que eu posso concluir? Vou mostrar aqui um slide que eu preparei para que vocês entendam como funciona. Quando eu digo no Visual Basic que eu estou criando um array e dentro do abre e fecha parênteses eu coloco o número seis, isso não significa que é um array de 6 posições, mas significa o seguinte: a última posição do array será 6 e a minha contagem sempre começa do 0.

Então eu tô dizendo o seguinte, isso aqui: quando eu coloco o 6, significa que eu vou ter um vetor que começa com 0, 1, 2, 3, 4, 5, 6, a última posição do vetor será 6 e, na verdade, o meu vetor, o array, não tem seis posições, tem sete posições.

E quando eu inicializei, inicialmente, da posição 1 à posição 6, eu coloquei isso nestas casas do meu array. Ou seja, a posição zero do meu vetor ela existe, só que ela tá vazia.

Quando eu fiz a segunda inicialização na segunda média, ou seja, comecei da zero e fui até à cinco, o que eu fiz foi preencher as primeiras cinco posições do meu array e a posição 6 ficou vazia.

Então, na verdade, quando eu coloco os seis aqui eu estou criando um array de sete posições. E, claro, o certo seria de eu colocar aqui, por exemplo, uma idade vai começar na posição zero e eu coloco aqui, por exemplo, o número 25.

E, na verdade, a minha média aqui, ela não tem. Ela começa do 0 até o 6, e aqui cai, e eu vou dividir por 7. Porque o meu vetor, o array, tem sete posições. Então o certo é isso aqui agora que eu estou fazendo. Claro que eu não tenho mais a variável média 2.

Então eu declarei um array de sete posições. Quando eu coloco seis ali dentro eu estou dizendo que o maior índice dele vai ser a posição 6, porque igual ao caractere, igual ao string, a primeira posição dele sempre será a posição zero.

E eu vou poder preencher ele com 7 valores e colocar ele na posição 0, 1, 2, 3, 4, 5 e 6. Então agora o meu programa está correto. Eu vou salvar, vou executar.

E claro que a média vai dar uma média, não vai dar mais de 30,5, vai dar um outro valor, porque eu coloquei mais um valor na posição 0 e dividi a soma de todas as posições agora por 7. Correto?!

Então, o certo realmente é que, quando eu declaro o array, o número que eu coloco dentro do parênteses durante a declaração não é o tamanho das minhas posições, número de posições que o array vai ter, não é o tamanho, mas sim o maior índice que eu vou ter do meu array. Sendo que ele sempre começa com zero.

Então eu posso dizer o seguinte: se eu coloco aqui seis é porque sempre o meu array vai ter sete posições. Se eu colocar sete, é porque o meu array vai ter oito posições. Se eu colocar um, o meu array vai ter duas posições.

E se eu colocar zero, vai ter só uma posição, que é a própria posição zero. Correto?! Então, sempre importante a gente colocar, acaba sendo não muito intuitivo, mas é importante é chamar atenção a esse detalhe.

Sobre o curso VB.NET com Windows Forms Parte 7: Arrays e Tipos genéricos

O curso VB.NET com Windows Forms Parte 7: Arrays e Tipos genéricos possui 287 minutos de vídeos, em um total de 62 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda .NET acessando integralmente esse e outros cursos, comece hoje!

  • 1206 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1206 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1206 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1206 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?

Acesso completo por 1 ano

Estude 24h/dia onde e quando quiser

Novos cursos todas as semanas