NAO SEI O CONCEITO DE FUNCOES...

FBUR 22/10/2010 12:19:55
#355670
Boa tarde...

Nunca uso funções do tipo: Funcrion Calcular(x as integer, y as Integer) as integer

Quando preciso fazer algo do tipo uso:


Private Sub Calcular()

a = 2
b =3

c = a + b

End sub


Onde A, B e C são variáveis publicas.

Resolvi começar a usar funçoes... Aí produzi o seguinte:


Public Function Calcular(a As Integer, b As Integer) As Integer

a = a + 1
b = b + 1

End Function

Private Sub Command7_Click()

Dim a As Integer
Dim b As Integer
a = 4
b = 5

z = Calcular(a, b)

MsgBox z

End Sub



Mas o valor de Z sempre é zero. O resultado deveria ser 11. Pq dá zero??
Acho que estou me perdendo no conceito de função. Alguém poderia me explicar de acordo com o meu exempo, como uma função retorna o valor do cálculo quando é chamada?

Obrigado!
MARCELO.TREZE 22/10/2010 12:33:48
#355671
Resposta escolhida
simples colega, se vc deseja somar a + b, então a sua função deve exibir este resultado, é melhor assim.

ex:

vc fez certo mas usou errado veja

Public Function Calcular(a As Integer, b As Integer) As Integer

a = a + 1[ô]-----> aqui vc soma 1 a a ?????
b = b + 1

End Function


agora da maneira correta

Public Function Calcular(a As Duble, b As Double) As Double

Calcular = a + b

End Function


ou seja a Função Calcular irá exibir o resultado da soma de a + b

exemplo de uso

Private Sub Command7_Click()

Dim a As Double, b As Double
a = 4
b = 5

MsgBox Calcular(a, b)

End Sub


repare que mudei o tipo de Integer para Double, pois assim vc poderá exibir valores fracionados, ex:

integer = {1,2,3,4,5...50,60}
Double = {(1,75),(2,83),(7,933)}

entendeu mais ou menos
MARCELO.TREZE 22/10/2010 12:41:39
#355672
agora analisando melhor o que deseja fazer, poderá fazer assim para obter o resultado de 11, conforme exemplo postado:

Public Function Calcular(a As Duble, b As Double) As Double

Calcular = (a + 1) + (b + 1)

End Function
FBUR 22/10/2010 12:50:21
#355673
Hum... acho que entendi.

Então para retornar o valor que é calculado pela função, vc tem que guardar o resultado do que se quer retornar, dentro da função??

Ou seja, de maneira geral:


Public Function Nome_da_Função(Parâmetros) As Algum_Tipo

[...vários_cálculos...]
x = resultado_que_eu_quero_que_retorne

Nome_Da_Função = x

End Function


é semrpe desta forma que retornamos o resultado do cálculo de uma função?

[ ]'s
MARCELO.TREZE 22/10/2010 12:56:58
#355674
não necessariamente, vc pode fazer a propria função exibir o resultado diretamente, mas desta maneira fica mais pratico, vamos ver alguns exemplos

se eu fizer assim



Public Function Calcular(a As Double, b As Double)
MsgBox (a + 1) + (b + 1) [ô]aqui quem decide que o resultado será exibido em uma mensagem é a função
End Function

Private Sub Command1_Click()
Call Calcular(4, 5)
[ô]ou
[ô]Calcular 4,5
End Sub

e da maneira anterior, em que vc poderá exibir o resultado onde achar melhor

ex:

Text1.Text = Calcular(4,5)
Label1.Caption = Calcular (4,5)

e assim vai




MARCELO.TREZE 22/10/2010 13:06:55
#355675
vamos a outro exemplo:

supondo que vc deseje criar uma função para tocar musica

e melhor maneira seria esta

Public Function Tocar_Musica( Caminho as string)
mmcAudio.FileName = Caminho
mmcAudio.Command = [Ô]Open[Ô]
mmcAudio.Command = [Ô]Play
End Function

ou seja necessito apenas mostrar o caminho da musica e pronto, não preciso armazenar nada na função, pois dentro dela ja existem os controles para isto, apenas passo o caminho para o controle e a função o executa.


Toca_Musica [Ô]c:\meuaudio\minhamusica.mp3[Ô]

FBUR 22/10/2010 13:16:47
#355677
hum... acho q agora ficou claro.

Então, se eu quiser exibir a função em uma msgbox:

====== EXEMPLO 1 ======

Private Sub Command7_Click()

Dim a As Integer
Dim b As Integer

a = 4
b = 5

Call Calcular(a, b)


End Sub

Public Function Calcular(a As Integer, b As Integer) As Integer

MsgBox (a + 1) + (b + 1)


End Function



Se eu quiser retornar o resultado para uma txt, label, o variável:

====== EXEMPLO2 ======

Private Sub Command7_Click()

Dim a As Integer
Dim b As Integer

a = 4
b = 5

txt3.Text = Calcular(a, b)


End Sub

Public Function Calcular(a As Integer, b As Integer) As Integer

Calcular = (a + 1) + (b + 1) [ô]a própria função guarda o resultado que quero que retorne.


End Function


Ou seja, no Exemplo 1, o resultado é exibido em uma msgbox, e a função deve ser chamada através do Call.

Já no exemplo 2, para retornar a função em outro lugar (txt, label, variável), sou obrigado a fazer ela receber o resultado que eu quero que retorne.

Entendi certo!? :D

Eu achava que para retornar o resultado de uma função, deveria ser algo como na linguagem C:


Private Sub Command7_Click()

Dim a As Integer
Dim b As Integer

a = 4
b = 5

txt3.Text = x


End Sub

Public Function Calcular(a As Integer, b As Integer) As Integer

dim x as integer

x = (a + 1) + (b + 1)

Return x [ô]Tipo na linguagem C....


End Function


[ ]'s
MARCELO.TREZE 22/10/2010 13:24:07
#355678
é isso mesmo que vc entendeu.

agora supondo que vc queira exibir o resulta do em X, este X tem de ser publico

ex:

Dim X as Integer[ô]--------declarei X no general do form


Public Function Calcular(a As Integer, b As Integer) As Integer
x = (a + 1) + (b + 1)
End Function



isso para que vc possa usar o valor de X em todo o form.

porém veja como ficaria para exibir o resultado

Private Sub Command7_Click()

Dim a As Integer
Dim b As Integer

a = 4
b = 5

call Calcular(a, b)

Text1.Text = X

End Sub


estranho né, sendo que vc pode atribuir o resultado a própria função


FBUR 22/10/2010 13:41:00
#355679
Muito bom Marcelo-Treze!

Muito obrigado!!

[ ]'s
Tópico encerrado , respostas não são mais permitidas