57
Visual Basic III – Procedimentos João Manuel R. S. Tavares CFAC – Concepção e Fabrico Assistidos por Computador

Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

Visual Basic

III – Procedimentos

João Manuel R. S. Tavares

CFAC – Concepção e Fabrico Assistidos por Computador

Page 2: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 2

Sumário

1) Criar Subrotinas em Visual Basic;

2) Criar Funções;

3) Mecanismo de passagem de parâmetros;

4) Modularização em Linguagens de Programação.

Page 3: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3

O que é a Modularização?

Dividir o programa em subtarefas.

Uma subrotina, ou uma função, executa um tarefa bem definida.

Aumento da facilidade de testar, depurar (debug) e corrigir, um programa.

Page 4: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 4

Porque utilizar Subrotinas e Funções?

Prover operações abstractas.

Torna os programas mais simples de escrever, depurar e manter.

Page 5: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 5

Modularização de Programas em Visual Basic

No Visual Basic, existem dois tipos de procedimentos (além dos procedimentos de eventos): – Subrotinas (Sub procedures);– Funções (Functions).

Nota: Para distinguir estes tipos procedimentos dos procedimentos associados a eventos, Subrotinas e Funções são referidos comoprocedimentos gerais (general procedure).

Como regra, uma subrotina ou função executa apenas uma tarefa, ou várias tarefas fortemente relacionadas, e deverá ser relativamente pequena.

Page 6: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 6

Modularização de Programas em Visual Basic

Os procedimentos gerais, funções ou subrotinas, são activados pelo próprio programador via código.

Os procedimentos de eventos são sempre activados a partir de uma acção executada pelo utilizador ou então pelo sistema operativo (ex: Windows).

Page 7: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 7

Passagem de Argumentos para subrotinas:

Quando uma subrotina é definida é por vezes necessário transferir variáveis utilizadas em subrotinas diferentes. Tal é designado, nas linguagens de programação, por passagem.

Page 8: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 8

Propriedades das Subrotinas:

Podem ser chamadas;

Podem receber dados, designados por argumentos (por passagem);

Podem retornar valores ao programa/módulo chamador;

Podem alterar o valor de uma variável recebida.

Page 9: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 9

Componentes de uma Subrotina:

Nome: utilizado para identificar a subrotina;

Parâmetros: uma subrotina aceita valores a partir do módulo chamador através dos seus parâmetros; também pode devolver valores através dos seus parâmetros.

Page 10: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 10

Nome das Subrotinas

As regras para nomear as subrotinas são as mesmas para nomear as variáveis.

Geralmente, os nomes das subrotinas começam com letras maiúsculas de forma a serem distinguidos dos nomes das variáveis.

Page 11: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 11

Sintaxe de uma Subrotina

Private Sub NomeDaSubrotina (lista de parâmetros)declaração/declarações

End Sub

A lista de parâmetros pode ser vazia; nestes casos, devesse manter os parênteses curvos nas designações das subrotinas mas omiti-los nas chamadas.

Page 12: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 12

Criar Subrotinas no Visual Basic:

1. Activar a janela de código;

2. Seleccionar Add Procedure no menu Tools;

3. Escrever na caixa respectiva o nome da subrotina ;

4. Clicar em Private para o alcance (por exemplo);

5. Carregar na tecla Enter ou clicar no botão OK;

6. Escrever as declarações da subrotina na janela de código.

Page 13: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 13

Exemplo de Chamada de uma Subrotina:Private Sub cmdCompute_Click()

Dim num As Singlenum = Val(InputBox("Enter a number:"))Call Triple(num)

End SubSubrotina Triple:

Private Sub Triple(num As Single)' Multiply the value of the number by 3picResult.Print "The number is"; 3 * num

End Sub

chamada

Page 14: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 14

Passagem de Argumentos para Subrotinas

Argumentos: variáveis ou expressões colocadas entre parênteses numa declaração Call.

Não é apenas o valor do argumento passado para o parâmetro mas também (no final) o valor do parâmetro é devolvido para o argumento.

Page 15: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 15

Exemplo de ArgumentosCall Triple(num)

ParâmetrosVaráveis colocadas entre parênteses depois do

nome da Subrotina.

Quando a subrotina é chamada, os valores dos correspondentes argumentos são transferidos para os seus parâmetros.

Page 16: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 16

Exemplo de ParâmetrosPrivate Sub Triple(num As Single)

Passagem de argumentos para parâmetros

Call Triple(num )

Private Sub Triple (num As Single)

Argumento

Parâmetro

Page 17: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 17

Passagem de Argumentos para Parâmetros

Call Add (x, y )

Private Sub Add ( num1 As Single, num2 As Single)

Parâmetros

Argumentos

Page 18: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 18

Passagem de Argumentos

A subrotina recebe a localização dos argumentos na memória, a subrotina pode utilizar e modificar o valor dos argumentos.

Dois sentidos: de entrada e de saída da subrotina.

Page 19: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 19

Passagem de Argumentos

Private Sub cmdDisplay_Click()Dim amt As Singleamt = 2picResults.Print amt;Call Triple(amt)picResults.Print amt

End Sub

Page 20: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 20

Subrotina Triple

Private Sub Triple(num As Single)' Triple a numberpicResults.Print num;num = 3 * numpicResults.Print num;

End Sub

Page 21: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 21

Passagem de Argumentos

Call Triple(amt)

Private Sub Triple (num As Single)

amt

num

Page 22: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 22

Passagem de Dados - por Referência

2 2 6 6

amt amt amt amt

num num

Subrotina Triple

Page 23: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 23

Passagem de Argumentos por Valor e por Referência

A passagem de argumentos para subrotina pode ser feita por Valor ou por Referência.

Na passagem por valor, a subrotina recebe apenas uma cópia do argumento; sendo assim, qualquer alteração no argumento dentro da subrotina não terá efeito no dado real (após o retorno da subrotina assumirá o valor anterior que tinha no módulo chamador).

Page 24: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 24

Passagem de Argumentos por Valor e por Referência

Já na passagem por referência, a subrotina recebe o endereço que realmente contém o dado; assim sendo, qualquer alteração no argumento alterará o dado de verdade.

O Visual Basic, por defeito, passa argumentos por referência. Para passar argumentos por valor, utiliza-se a palavra chave ByVal na lista de parâmetros, ou então coloca-se o argumento entre parênteses na chamada da subrotina.

Page 25: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 25

Regras Importantes para a Passagem de Argumentos para uma Subrotina

O número de argumentos e parâmetros deve coincidir.

O tipo de dado de cada argumento deve ser igual ao do correspondente parâmetro.

Page 26: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 26

Variáveis Locais:

Uma variável que é apenas utilizada no interior de um procedimento especifico (subrotina ou função).

O alcance de uma variável local é a zona do procedimento no qual essa variável foi definida.

Quando a mesma variável aparece em dois procedimentos diferentes o Visual Basic atribui às varáveis identidades distintas de tal modo que são tratadas como variáveis diferentes e independentes.

Page 27: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 27

Variáveis Locais:

Declaradas no interior da definição de um procedimento;

Privadas à definição do procedimento;

Variáveis em procedimentos diferentes são totalmente independentes;

Procedimentos diferentes podem ter variáveis com nomes iguais; contudo, cada variável terá a sua locação de memória própria.

Page 28: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 28

Vantagens na utilização de Variáveis Locais

Extremamente úteis na programação em equipa;

Evitam efeitos colaterais (nos quais existe uma alteração acidental do valor da variável).

Page 29: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 29

Exemplo de Variáveis Locais

Private Sub cmdButton_Click()

Dim var1 As Integer, var2 As Integer, num As Integervar1 = 2var2 = 4Call Add(num)picBox.Print num

End SubAs variáveis var1, var2 e num, são locais ao procedimento; o valor da variável num é passado para a subrotina Add.

Page 30: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 30

Subrotina Add

Private Sub Add(num As Integer)Dim var1 As Integer, var2 As Integernum = var1 + var2

End Sub

As variáveis var1 e var2 são locais à subrotina Add; no retorno, a variável num terá valor igual à soma de var1com var2.

Page 31: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 31

Variáveis a nível de Formulário

Variáveis a nível de formulário (form-level variables) são visíveis a todos os procedimentos (são variáveis Globais) do formulário.

Variáveis a nível de formulário aparecem no topo da janela de código do formulário.

Trata-se de uma solução para tornar visíveis a todos os procedimentos de um formulário variáveis sem recorrer ao mecanismo de passagem.

Page 32: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 32

Como criar Variáveis a nível do Formulário?

1. Activar a janela de código;

2. Clicar na seta de queda na zona direita da caixa de listagem dos objectos;

3. Clicar em General;

4. Clicar em Declaration na caixa de listagem dosprocedimentos;

5. Escrever as declarações Dim para as variáveis a nível de formulário.

Page 33: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 33

Exemplo

' Na secção Declaration do objecto GeneralDim num1 As Single, num2 As Single

num1 e num2 são duas variáveis globais ao nível do formulário do tipo single.

Page 34: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 34

Revisão

O Visual Basic tem dois tipos de procedimentos gerais:

– Subrotinas;– Funções

Cada subrotina/função executa uma tarefa distinta.

A instrução Call provoca com que uma subrotina seja executada.

Page 35: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 35

Revisão

Uma subrotina pode receber muitos valores

Subrotina

Uma subrotina pode devolver muitos valores

Page 36: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 36

Revisão

Valores podem ser passados entre o programa/módulo chamador e a subrotina através da passagem de argumentos.

O número e o tipo de argumentos no programa/módulo chamador e na subrotina devem ser compatíveis.

Page 37: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 37

Revisão

Variáveis que são usadas (definidas) num procedimento particular são designadas por variáveis locais.

Valores atribuídos a este tipo de variáveis não são retornados ao módulo chamador.

Page 38: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 38

Revisão

Diagramas de estrutura são úteis na determinação da divisão de um programa em procedimentos gerais (subrotinas/funções).

A programação modularizada oferece vantagens significativas:

– Facilidade de manutenção;– Extremamente útil na programação em equipa;– Podem ser evitados efeitos colaterais.

Page 39: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 39

Erros Frequentes

Passar tipos de dados incorrectos.

Não devolver o resultado da computação ao programa/módulo chamador.

A única maneira de uma subrotina devolver um valor, ou vários valores, é por intermédio dos seus argumentos.

Page 40: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 40

Revisão

Um procedimento geral é como uma caixa preta; sabe-se o que entra e o que sai; mas não é necessário saber o que acontece no seu interior (para quem o utiliza).

Numa subrotina o(s) resultado(s) da computação no seu interior apenas pode ser devolvido através dos seus argumentos.

Page 41: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 41

Um outro Exemplo

Private Sub cmdDisplay_Click()' Demonstra que as variaveis numa subrotina nao mantem' os seus valores nas chamadas subsequentesCall ThreeCall Three

End Sub

Page 42: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 42

Subrotina Three

Private Sub Three()Dim num As Single' Mostra o valor de num e atribui-lhe o valor 3picResults.Print num;num = 3

End SubSaída:

0 0

Page 43: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 43

O que é uma função?

Uma função também é desenvolvida para realizar uma tarefa especifica.

Uma função é desenvolvida para devolver um único valor ao programa chamador.

Tipos de Funções: Funções Standards (built-in);

Funções definidas pelo programador.

Page 44: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 44

Funções Definidas pelo Programador

Uma função é desenvolvida para devolver um único valor.

O valor é devolvido pela utilização do nome da função.

Os argumentos de uma função não devem ser alterados no seu interior.

Se um subprograma necessita de devolver mais do que um valor devesse utilizar, em vez de uma função, uma subrotina.

Page 45: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 45

Sintaxe para Funções

Private Function NomeDaFuncao(lista de parâmetros) As tipoDeDadodeclaracão/declarações ………..NomeDaFuncao = ……..

End Function

Tal como para as subrotinas a lista de parâmetros pode ser vazia.

Page 46: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 46

Exemplo de uma Função(utiliza um função para converter de graus Fahrenheit para graus Celsius)

Private Sub cmdConvert_Click()picTempC.ClspicTempC.Print FtoC(Val(txtTempF.Text))

End Sub

Private Function FtoC(t As Single) As Single‘ Convert Fahrenheit temperature to CelsiusFtoC = (5 / 9) * (t - 32)

End Function

Page 47: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 47

Regras para Definir e Chamar Funções

No interior da função definida pelo programador deve existir uma atribuição do valor a retornar ao nome da função.

Funções definidas pelo programador são chamadas da mesma forma que as funções predefinidas.

Uma função definida pelo programador pode ser chamada no interior de uma expressão.

Page 48: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 48

Retorno de um Valor

Uma função pode receber muitos valores

Função

Apenas um valor pode ser devolvido directamente

Page 49: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 49

Exemplo de uma Função

Private Sub cmdDetermine_Click()Dim nom As String' Determine a person's first namenom = txtFullName.TextpicFirstName.ClspicFirstName.Print "The first name is "; FirstName(nom)

End Sub

Page 50: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 50

Função FirstName

Private Function FirstName(nom As String) As StringDim firstSpace As Integer' Extract the first name from a full namefirstSpace = InStr(nom, " ")FirstName = Left(nom, firstSpace - 1)

End Function

Page 51: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 51

Erros Frequentes

Passagem de tipos de dados incorrectos;

A não especificação do tipo de dado para o valor de retorno;

Esquecimento do tipo de dado de uma parâmetro da função;

Não atribuição do valor de retorno ao nome da função no seu interior;

Escrita errada do nome da função;

Evocação errada da função no interior de uma expressão.

Page 52: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 52

Exemplos

Private Sub cmdDisplay_Click ()' Compute Volume of a CylinderDim r As Single, h As Singler =1 h = 2Call DisplayVolume (r, h)r =3h = 4Call DisplayVolume (r, h)

End Sub

Page 53: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 53

Função AreaPrivate Function Area (r As Single) As Single

' Compute area of a circle of radius rArea = 3.14159 * r ^ 2

End Function

Subrotina DisplayVolume

Private Sub DisplayVolume ( r As Single, h As Single)PicOutput.Print "Volume of cylinder having base area"; Area( r)PicOutput.Print "and height"; h; "is"; h * Area (r )

End Sub

Page 54: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 54

Outro Exemplo

Private Sub cmdDisplay_Click()Dim a As String' Demonstrates local variablesa = “Choo “picOutput.Print = TypeOfTrain()

End Sub

Page 55: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 55

Função TypeOfTrain

Private Function TypeOf Train( ) As StringDim a As Stringa = a & aTypeOfTrain = a & “train”

End Function

Page 56: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 56

Último Exemplo

Private Sub cmdDisplay_Click ( )Dim num As Single' Triple a numbernum = 5picOutput.Print Triple (num)picOutput.Print num

End Sub

Page 57: Visual Basictavares/ensino/CFAC/Downloads/... · 2011-09-12 · @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 3. O que é a Modularização? Dividir o

@2009 - João Manuel R. S. Tavares CFAC: Visual Basic: III - Procedimentos 57

Função Triple

Private Function Triple(x As Single) As Single Dim num As Singlenum = 3Triple = num * x

End Function