sábado, 7 de julho de 2012

Arrays:

     Um array é uma lista de variáveis, com o mesmo tipo de dados e nome. Quando trabalhamos com apenas um item, usamos a variável. Mas quando temos uma lista de itens, do mesmo tipo, precisamos declarar um array de variáveis, ao invés de usar uma variável para cada item.

  • Dimensão do Array:
     Um Array pode ser dimensional ou multidimensional. Um array dimensional é como uma lista de itens, ou uma tabela onde possui uma linha e uma coluna. Um array multidimensional é uma tabela de itens, que contem suas linhas e colunas. O formado do array dimensional é Array(x), o formado do bidimensional é Array(x, y), e do tridimensional é Array(x, y, z). Exemplos:
Array Dimensional:
Lista de Alunos: Aluno(1), Aluno(2), Aluno(3)
Array MultiDimensional:
Lista de Alunos: Aluno(1,1), Aluno(1,2),  Aluno(1,3)
                           Aluno(2,1), Aluno(2,2), Aluno(2,3)
                          Aluno(3,1), Aluno(3,2), Aluno(3,3)
     No Visual Basic exitem 2 tipos de arrays: Fixed-Size e Dynamic. 

  • Fixed-Size Arrays:
     É possível fazer uma analogia do array com um rack de cds. No caso do tipo Fixed-Size o número de slots do rack é limitado. Suponhamos que você tenha 3 cds, um do Deftones, outro do Pink Floyd e outro do AC\DC. Para guardar eles no seu rack, ele precisa ter 3 slots. Então, no VB temos que declarar esses 3 slots:

Dim strCDRack (0 To 2) As String
strCDRack(0) = "Deftones"
strCDRack(1) = "PinkFloyd"
strCDRack(2) = "ACDC"

     O formato geral para se declarar um array é o seguinte:

Dim|Public|Private NomedoArray(Subscript) As TipodeDado

- O Dim numa procedure vai fazer com que o array fique disponível apenas com essa procedure. Usar o Private vai fazer com que fique acessível apenas no form ou módulo, já o Public vai tornar público para todo o projeto.
 - NomedoArray, como o nome diz é o nome que você vai dar para o Array.
- Subscript é a dimensão do array.
- TipodeDado é qualquer tipo válido de dados.

  • Dynamic Arrays:
     Suponhamos que você tem o quarto cd, mas o rack só suporta 3 slots, e você não quer jogar fora os seus 3 cds que já estão por lá. Então você decide construir um novo slot:

Dim strCDRack() As String
ReDim strCDRack (0 To 2) As String
strCDRack(0) = "Deftones"
strCDRack(1) = "PinkFloyd"
strCDRack(2) = "ACDC"
ReDim Preserve (0 To 3) As String
strCDRack(3) = "Rammstein"

     O Preserve força o VB a preservar os valores existentes nos arrays.  Sem essa palavra-chave todos os 3 cds seriam perdidos. 

     A sintaxe do ReDim é a seguinte:

ReDim [Preserve] NomedoArray(Subscript) As TipodeDado

- ReDim significa que você está redimencionando o array.
- Preserve é opcional. Ele força o VB a manter o valor dos elementos. Sem ela, todos os elementos iriam retornar os seus valores padrões. (tipos de dados numéricos iriam retornar 0, variable-lenght strings retornariam "",  fixed-lenght strings seriam preenchidos por zeros, e variants ficariam vazias).

  • Exemplo Prático:
* No exemplo, foi utilizado 1 botão e 1 listbox:
Dim NomeAluno(10) As String
Dim num As Integer

Private Sub addNome()
For num = 1 To 10
NomeAluno(num) = InputBox("Digite o nome do aluno")
List1.AddItem NomeAluno(num)
Next
End Sub

Private Sub Command1_Click()
addNome
End Sub


* Fontes:
http://www.vbtutor.net/vb6/lesson16.html
http://patorjk.com/programming/tutorials/vbarrays.htm
 

quinta-feira, 5 de julho de 2012

Subrotinas e Funções:

  • Subrotinas:
     As subrotinas podem ser definidas como miniaturas dos programas. A subrotina precisa de uma nome para ser atribuido à ela, assim como as variáveis. Mas ao invés das variáveis que armazenam dados, as subrotinas armazenam códigos. Algumas subrotinas são chamadas automaticamente quando certas ações são executas, é o caso da subrotina Form_Load que é chamada automaticamente quando um form é executado.

     As subrotinas são úteis para eliminar as redundâncias, facilitando a manutenção do programa.
  • Criando uma Subrotina:
     Para criar uma subrotina é muito simples, são apenas 2 linhas de código:
Sub NomedaSubrotina()
End Sub

  • Escopo da Subrotina:
     É uma palavra-chave que vem depois do Sub. Private e Public são exemplos de escopos.  Ele representa onde a subrotina pode ser chamada no seu programa. Subrotinas com o escopo Public pode ser chamado em qualquer lugar do projeto, enquando as Private só podem ser chamada por outro form. 
     Os escopos das subrotinas são muito utilizadas para se evitar erros!! Se declarar uma subrotina como pública em todo lugar, pode gerar algum erro difícil de ser encontrado, causando muita dor de cabeça. 
  • Parâmetros:
     Parâmentros, também chamados de Argumentos, são variáveis que podem ser definidas nas subrotinas. As subrotinas com parâmentros são assim:

Private Sub Adicao(x As Integer, y As Integer)
    MsgBox x + y
End Sub

Private Sub Form_Load()
Dim a As Integer
Dim b As Integer
a = 3
b = 7
Adicao a, b
End Sub

     As variáveis x e y são Parâmentros, e Adicao é a Subrotina. No exemplo acima, a e b são representações dos parâmentros x e y. 
  • ByRef e ByVal:
     Parâmentros podem ser enviadas para as subrotinas por: referência(ByRef) e por valor(ByVal).
      Quando os parâmentros são passados por referência (ByRef) , apenas a memória das variáveis é passada. Isso significa que os valores podem ser modificados pela subrotina, que terá o novo valor quando a subrotina terminar. A variável que irá conter o valor de "retorno"  ou se saída deve ser definida pelo ByRef.
     Quando os parâmetros são passados pelo valor (ByVal) , ca cópia das variáveis é passada.  Isso significa que mesmo se os valores forem alterados pela subrotina, o valor original é mantido pela subrotina. Quando a subrotina finaliza, a variável passada por valor (ByVal) retêm o valor que foi passado originalmente antes da chamada do programa.

 Exemplo:

Sub ExSubrotina()
    MsgBox "MsgBox pela Sub!!"
End Sub

Private Sub Form_Load()
    MsgBox "MsgBox pelo Form_Load!!!"
    ExSubrotina
End Sub
  • Criando uma função: 
As funções são basicamente a mesma coisa que as Subrotinas, exceto por elas retornarem um valor. Isso significa que uma função tem um tipo, que irá retornarum valor que foi definido pelo código da função.

     O formato geral das funções é: 

Public function NomedaFunção (Parâmentro as TipodeDado, ...) As TipodeDado
* as funções do tipo Public podem ser usadas por todo o projeto, se for criado em um módulo.
ou
Private function NomedaFunção (Parâmentro as TipodeDado, ...) As TipodeDado
* as funções do tipo Private podem ser usadas somente em alguns módulos ou procedures.

Exemplo de função:
* No módulo:
Public Function Conta(x As Integer, y As Integer, z As Integer)
Dim Operacao As Integer
Operacao = (x * y)
Operacao = Operacao * 30
Operacao = Operacao * z
Conta = Operacao
End Function

* No Form (adicione 3 textbox, 1 botão, 1 label e mais outras labels a seu critério)
Private Sub Command1_Click()
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
a = Text1.Text
b = Text2.Text
c = Text3.Text
d = Conta(a, b, c)
Label1.Caption = "Eu bebo " & d & " copos de água em " & c & " meses!!!"
End Sub

  •  Subrotinas ou Funções? Eis a questão.
    Se estiver em dúvida em utilizar uma Subrotina ou Função, apenas se pergunte: Vou precisar retornar um valor?? Se a resposta for sim, então use a Função. Se não, use a subrotina. ;)

* Fontes:
http://en.wikiversity.org/wiki/Functions_and_Subroutines_in_VB6
http://www.vb6.us/tutorials/understanding-subroutines-and-functions-vb
http://www.vbtutor.net/vb6/lesson14.html