Tipo de variável recebida por parametro

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Tipo de variável recebida por parametro

Mensagem por rubens »

Bom dia...

Uma variável recebida por parametro qual a visibilidade/tipo dela? Local ?
Olha esse trecho:

Código: Selecionar todos

Function Main( cPath_Dbf, cEmpresa, cPath )
	Hb_Default( @cPath_dbf, '\DATASAC\' )
	Hb_Default( @cEmpresa, 'Backup' )	 
	Hb_Default( @cPath, 'D' )	 
        Teste()
	RETURN nil 

Function Teste()
    Alert( cPath_Dbf )
   Return nil
Dá erro de variável não encontrada... na linha do Alert( cPath_dbf ).
Daí para poder usar assim tenho que criar uma outra variável dentro do Main. Não posso mudar para Public ou Private uma variável que já existe.
vai virando uma lista de variáveis.
Alguma opção na compilação para que ao receber a variável ela fica visível para as subrotinas/funções?

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Tipo de variável recebida por parametro

Mensagem por Nascimento »

tente dessa forma:

Código: Selecionar todos

Function Main( )
 parameters cPath_Dbf, cEmpresa, cPath 
   Hb_Default( @cPath_dbf, '\DATASAC\' )
   Hb_Default( @cEmpresa, 'Backup' )    
   Hb_Default( @cPath, 'D' )    
        Teste()
   RETURN nil 

Function Teste()
    Alert( cPath_Dbf )
   Return nil
porque desta forma os parametros passam como variaveis privates entre os parenteses elas são locais
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Tipo de variável recebida por parametro

Mensagem por alxsts »

Olá!
rubens escreveu:Uma variável recebida por parametro qual a visibilidade/tipo dela? Local ?
Sim, este é o comportamento padrão, exceto para arrays.

Código: Selecionar todos

Function Main()

local a := {1,2,3}
local b := 0

setmode(25,80)
cls

f1( a, b )

QOut( "a[1]", a[1], "b", b )

__wait()

return nil

function f1(x,y)

   x[1]++
   y++

return nil
Evite usar variáveis Private e Public. Dê preferência às variáveis dos tipos Local e Static. Se precisar usá-las para leitura em outras funções, passe-as como parâmetro. Neste caso, serão passadas por valor (by val).

Código: Selecionar todos

Function Main( cPath_Dbf, cEmpresa, cPath )

   Hb_Default( @cPath_dbf, '\DATASAC\' )
   Hb_Default( @cEmpresa, 'Backup' )  
   Hb_Default( @cPath, 'D' )  
   
   Teste( cPath_Dbf )   // passar parâmetro

 RETURN nil 

Function Teste( cPath_Dbf )  // recebe parâmetro por valor e cria variável LOCAL cPath_Dbf na função Teste()
   Alert( cPath_Dbf )
 Return nil
Se precisar atualizar as variáveis na função chamada, passe-as por referência (by ref), precedidas pelo carácter @, como mostrou o Nascimento.

O uso da sentença Parameters é obsoleto. Ao invés de

Código: Selecionar todos

	Function Main( )
	 parameters cPath_Dbf, cEmpresa, cPath   // --> Cria estas variáveis como PRIVATE
Use como você fez

Código: Selecionar todos

Function Main( cPath_Dbf, cEmpresa, cPath )
[]´s
Alexandre Santos (AlxSts)
Responder