O comando For realiza uma contagem entre um intervalo de números especificados.
For <Variável> = <númeroinicial> to <numerofinal> <Bloco de código>
Next
Necessitamos de uma variável numérica para usarmos o comando For, Next
Dim Contador as Integer Contador=0
For Contador = 1 to 10 Print Contador Next
Podemos pedir ao comando FOR que conte de forma diferente através do comando STEP. O comando STEP modifica a forma com que o contador é incrementado. Por padrão, ele será incrementado de 1 em 1. Com o comando STEP podemos configurar do modo que quisermos.
Dim Contador as Integer Contador=0
For Contador = 1 to 12 Step 3 Print Contador
Next
No código acima, o contador irá contar até 12, de 3 em 3.
EXIT DO e EXIT FOR
Os comandos EXIT DO e EXIT FOR, forçam a saída de um loop ou de um contador, respectivamente.
O comando EXIT DO nos permite forçarmos a saída de um loop criado através do comando DO.
Dim Numero as Integer
Numero=0 Do While Numero<10 Print Numero Numero = Numero +1 If Contador = 5 then Exit Do End if Loop
O código acima sem o comando Exit Do iria contar até 9. Entretanto, temos um desvio condicional que nos diz que se o número for igual a 5, o comando EXIT DO será executado, e no entanto, o loop será quebrado.
O comando EXIT FOR força a saída de um contador. Vejamos um exemplo com a mesma função do código anterior, porém usando um contador:
Dim Contador as Integer Contador = 1 For Contador = 1 to 9 Print Contador If Contador = 5 then Exit For End if Next
Bem, já conhecemos o suficiente sobre contadores para podermos colocar tudo isso em prática. Então vamos fazer o seguinte:
- Crie um ListBox com 10 nomes diferentes
- Insira um Botão que servirá para procurar determinado nome na lista e dizer se ele existe ou não
- Sinalize através do programa se a pesquisa obteve sucesso ou não.
Atenção:
O exercício deve ser feito utilizando um contador.
Solução:
Dim NaoEncontrado As Boolean
For Contador = 0 To Lista.ListCount - 1 If Lista.List(Contador) = "NomeTal" Then MsgBox "Encontrado" NaoEncontrado = False Exit For End If NaoEncontrado = True Next
If NaoEncontrado = True Then MsgBox "Não Encontrado" End If
SubProcedimentos
Também podem ser chamados de subrotinas, procedimentos ou simplesmente rotinas. Tem uma função específica dentro do projeto. Ou seja, em um projeto podemos ter uma rotina de cadastro, uma de consulta, impressão, etc.
Um projeto médio ou grande que não fosse dividido em rotinas seria um verdadeiro inferno para o programador, e para o usuário também. Em vista dos problemas que acarretaria devido à demora na manutenção.
Além de organizar melhor o projeto, as subprocedimentos podem oferecer o reaproveitamento de código, muito importante nos dias atuais quando se está sempre correndo contra o relógio. Os subprocedimentos aceitam parâmetros, o que significa que podemos tratar diferentes valores usando apenas um subprocedimento. Vejamos um exemplo prático do que eu estou dizendo.
No nosso exercício anterior, utilizamos um contador que verificava se determinado nome existia na lista. Digamos que quiséssemos mudar esse nome. Poderíamos criar um
subprocedimento passando para ele toda vez que o chamarmos o nome que queremos procurar. Estaríamos passando um parâmetro para ele. Podemos colocar vários parâmetros em um procedimento. Sejam eles variáveis, valores ou objetos.
Na verdade, já estamos trabalhando com subprocedimentos desde o início. Ao codificar um evento Click de um botão de comando, você já está trabalhando em um
subprocedimento. A diferença é que este já é um subprocedimento padrão do botão. Para criarmos um subprocedimento usamos a seguinte sintaxe:
Private Sub <NomeDoProcedimento>(Parâmetros) <Blocos de código do procedimento>
A palavra Private pode ser substituída por Public, caso precisarmos que o nosso subprocedimento possa ser acessado por um módulo externo.
Quanto aos parâmetros podem ser passados da mesma forma que declaramos variáveis, com a diferença que não precisamos usar o comando DIM. Esses parâmetros funcionam como variáveis dentro do procedimento.
Poderíamos criar um subprocedimento para resolver aquele nosso problema anterior:
Public Sub ProcuraNaLista(Nome as String)
Dim Contador As Integer
Dim NaoEncontrado As Boolean
For Contador = 0 To Lista.ListCount - 1 If Lista.List(Contador) = Nome Then MsgBox "Encontrado" NaoEncontrado = False Exit For End If NaoEncontrado = True Next
If NaoEncontrado = True Then MsgBox "Não Encontrado" End If
End Sub
Note que o único trabalho que tivemos na alteração do código foi trocar o nome que procuraríamos pela variável Nome, que ao chamarmos o subprocedimento, terá o nome a qual informamos no parâmetro.
Para chamarmos um subprocedimento, bastar chamá-lo pelo nome, com os seus respectivos parâmetros:
ProcurarNaLista(“Maria da Silva”)
No caso de não existirem parâmetros, use apenas o nome do procedimento.
Subprocedimentos criados com o comando Public dentro de um módulo podem ser acessados por todo o projeto. Se forem criados com a palavra Private podem ser acessados somente dentro do módulo que os criou. Quando me refiro a “módulo que os criou”, posso estar me referindo tanto a um módulo de código, quanto ao módulo classe, um formulário ou qualquer outro objeto a qual podemos codificar.
Para sairmos de um subprocedimento sem executar os comandos restantes, usamos o comando Exit Sub:
Public Sub ProcuraNaLista(Nome as String)
Dim Contador As Integer
Dim NaoEncontrado As Boolean Exit Sub
If Lista.List(Contador) = Nome Then MsgBox "Encontrado" NaoEncontrado = False Exit For End If NaoEncontrado = True Next
If NaoEncontrado = True Then MsgBox "Não Encontrado" End If
End Sub
No código acima, o contador nem chega a ser inciado e o comando Exit Sub já termina a execução do subprocedimento, fazendo que todos os comandos do subprocedimento que estiverem após o Exit Sub sejam ignorados.
Funções
Sua finalidade é retornar um valor, mas também podem executar operações. Temos
várias funções nativas do Visual Basic, a qual veremos logo mais, mas também podemos construir nossas próprias funções. As funções são declaradas da mesma maneira que os subprocedimentos, com a diferença que usaremos a palavra FUNCTION no lugar da palavra SUB.
Private Function <NomeDaFunção>(Parâmetros) <Blocos de código da Função>
End Function
Assim como os subprocedimentos, podemos usar a palavra Public no lugar de Private
da mesma forma que usamos com os subprocedimentos.
Para facilitar o entendimento das funções, digamos que você precise de uma função que retorne a soma de dois números. Um exemplo muito simples, mas que permite entender como funcionam as funções de usuário. O código seria o seguinte:
Private Function Soma(Num1 as Integer, Num2 as Integer) Soma = Num1 + Num2
End Function
Primeiro, declaramos a função com duas variáveis(parâmetros) que representarão so números(Num1 e Num2):
Private Function Soma(Num1 as Integer, Num2 as Integer)
Depois, atribuímos que Soma será igual a soma de Num1 e Num2.
Soma = Num1 + Num2
Ao Criarmos uma função, você pode automaticamente atribuir qualquer valor a ela, desde que seja dentro da função. O Tipo de valor que a Function Soma terá vai depender do valor que a ela for atribuído. Entretanto, podemos definir esse tipo na declaração da função:
Private Function Soma(Num1 as Integer, Num2 as Integer) as Integer
Isso fará com que a Function Soma aceite apenas valores numéricos. Caso seja a ela atribuído uma string, o Visual Basic gerará um erro em tempo de execução.
O comando End Function encerra um bloco de função. O uso das funções em Visual
Basic é extremamente útil e o limite para o uso de funções é a imaginação de cada um. Em breve, veremos aplicações práticas e funções mais sofisticadas.
Matrizes
Uma matriz nos possibilita o armazenamento de vários valores em uma única variável. Isso porque ele possui níveis dentro dela. Para declararmos uma matriz usamos a seguinte sintaxe:
Dim <NomeMatriz>(<Número do maior nível que existirá na matriz>) as <tipo da variável
Por exemplo, se quisermos ter uma variável chamada Nome armazenarmos 3 nomes diferentes, faríamos o seguinte:
Dim Nome(2) as String Nome(0) = ”Maria Da Silva” Nome(1) = ”José dos Santos” Nome(2) = ”Roberto Carlos”
É importante lembrar que o número que vai entre parênteses quando declaramos a matriz não é o número de níveis que existirá na matriz, pois a matriz por padrão sempre inicia com o número zero. Por padrão, o número de níveis que existirá na matriz será o número que colocarmos entre parênteses menos 1. Entretanto, podemos mudar isso definindo um nível inicial e um nível final dentro da matriz. Para isso fazemos o seguinte:
Dim Matriz(1 to 10) as Integer
Como você pode ver, ao invés de usarmos somente um número que será o nível máximo
dentro da matriz, especificamos que os níveis existentes serão entre 1 e 10. Ou seja, o primeiro nível será 1 e o último 10. Podemos especificar qualquer número inicial e a matriz sempre existirá a partir daquele número. Por exemplo, se você definir para que a matriz inicie por 2, se tentar usar a matriz como se o nível 1 existisse, o Visual Basic irá gerar um erro em tempo de execução.
No nosso exemplo anterior usamos Dim Nome(2) as String
para declararmos uma matriz de 3 níveis, que terá Nome(0) como primeiro nível e
Nome(2) como o último nível.
Existe outra forma de fazer com que o primeiro nível de uma matriz não seja zero, que é usando o comando Option Base. Com ele podemos definir um valor para ser um valor inicial de todas as matrizes que forem criadas. O comando Option Base deve ser adicionado á seção General-Declarations:
Se quisermos que todas as matrizes no módulo que o Option Base for declarado, usaremos
Option Base 1. Se quisermos que iniciem com 2, Option Base 2, e assim sucessivamente.
Todos os níveis dentro da matriz deverão ter valores de acordo com o tipo que foi declarado, a menos que você declare uma matriz como sendo do tipo Variant.
No lugar do número que define o nível da matriz podemos usar também variáveis. Essa prática é muito utilizada para iterar por todos os níveis da matriz, preenchendo-a com valores. Veja um exemplo:
Dim Matriz(10) as Integer Dim Contador as Integer For Contador = 0 to 10
Matriz(Contador) = Contador Print Matriz(Contador) Next
No código acima, usamos um contador para iterar pelos níveis da matriz. À medida que a variável Contador é incrementada, é atribuído um valor diferente ao próximo nível. O comando Print imprime o valor de Matriz(Contador) no formulário.