como saber c uma variavel exite numa funcao em tempo de exec

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

como saber c uma variavel exite numa funcao em tempo de exec

Mensagem por juniorcamilo »

Amigos c um funcao tipo:

Código: Selecionar todos

 Function TESTE(a,b)
Local a, b
......
if a == b
   a := cvar
else
   b := cvar
endif
? cVar
? a
? b
.......
return .t.
a variavel 'cvar' nao esta declarada em uma chamada a esta funcao mas em outras chamada de outro lugar do prog. ela é declarada e 'private', tipo, aquela coisa, agente vai programando e programando e programando, ai c esquece de que em uma funcao de tempos atras criada tem uma variavel que so c usa em outra chamada, tem possibilidade d quando agente c deparar com 'variavel nao existe' colocar um if tipo c ela nao esta declarada ai agente declara só para passar pela funcao?
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Re: como saber c uma variavel exite numa funcao em tempo de

Mensagem por Itamar M. Lins Jr. »

juniorcamilo escreveu:Amigos c um funcao tipo:

Código: Selecionar todos

 Function TESTE(a,b)
//Local a, b ISSO não é necessário, já tem em cima
......
if valtype(cVar) = 'U' // undefined (não definida)
   return .f.
endif
if a == b
   a := cvar
else
   b := cvar
endif
? cVar
? a
? b
.......
return .t.
Saudações
Itamar M. Lins Jr.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

O que eu usaria:

Código: Selecionar todos

function ExistVar(cName)
local lFound := .T.
local bError := ErrorBlock({|o|Break(o)})
begin sequence
    &cName := &cName
recover
    lFound := .F.
end
ErrorBlock(bError)
return lFound
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
vailton
Colaborador
Colaborador
Mensagens: 390
Registrado em: 17 Nov 2005 19:08
Localização: Brasil
Contato:

Mensagem por vailton »

Se a variavel for PUBLIC ou PRIVATE e o valor diferente de NIL dá para usar:

Código: Selecionar todos

function ExistVar(cName)
return TYPE(cName) <> "U"
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"

E-mail/MSN: contato@vailton.com.br
Skype: vailtom
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Aliás, em tempo: nunca uso isso e acho que o ideal é nunca precisar usar esse tipo de teste. Variável não declarada é erro de lógica, muito embora a linguagem permita, o que na minha opinião, é um erro pior ainda.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

Mensagem por juniorcamilo »

Maligno escreveu:Aliás, em tempo: nunca uso isso e acho que o ideal é nunca precisar usar esse tipo de teste. Variável não declarada é erro de lógica, muito embora a linguagem permita, o que na minha opinião, é um erro pior ainda.
com toda certeza erro puro da minha logica,,, so que infelismente as vezes por pressa e nao testar acaba fazendo muita coisa com uma unica funcao que pra sair caçando onde chama ela aqui e ali,, e foda... mas é foda mais ainda eu ver que a solucao é bem simples para isso,rsrsrsr

Obrigado a todos..
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Já tem o ditado: "a pressa é inimiga da perfeição, e para o Muprhy a perfeição é como alho pro vampiro". :)))
Mas felizmente, como você disse, a solução é simples. Menos mal.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Mensagem por ANDRIL »

Tente colocar no inicio do seu programa a variavel que esta causando erro. Apenas defina ela como por exemplo, private cVar.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Responder