Clipper On Line • Ver Tópico - Cuidado ao declarar variáveis com M->

Cuidado ao declarar variáveis com M->

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Cuidado ao declarar variáveis com M->

Mensagempor JoséQuintas » 30 Mar 2021 15:29

MEMVAR a

PROCEDURE Main

   PRIVATE a := 20

   Teste()

   Inkey(0)

FUNCTION Teste()

   LOCAL a := 10

   ? m->a
   ? a

   RETURN Nil


Resultado na tela:

20
10

Usar variável com m-> não é a mesma coisa que declarar variável.
m-> é pra variáveis PRIVATE.

Interessante isso....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Cuidado ao declarar variáveis com M->

Mensagempor asimoes » 30 Mar 2021 21:39

Na documentação diz:

MEMVAR
Declares PRIVATE or PUBLIC variables.
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Cuidado ao declarar variáveis com M->

Mensagempor JoséQuintas » 31 Mar 2021 08:06

Sim MEMVAR é pra declarar variáveis PUBLIC e PRIVATE.

E m->variavel é justamente pra pegar valor de PUBLIC/PRIVATE.
Sempre pensei que m-> indicava qualquer tipo de variável, mas é só pra PUBLIC/PRIVATE.

Na compilação -w3 -es2 isso fica bem claro, porque m-> acaba sendo similar a declarar como memvar.

No caso de rotinas de LIB, por exemplo, colocar m-> em tudo que é variável pode ter resultados imprevisíveis.

Aqui uso alias pra aquivos, e somente pra arquivos. arquivo->campo
Variáveis deixo sem nenhuma indicação, sempre declarando LOCAL ou MEMVAR pras exceções.
E declaração FIELDS não uso. A única exceção é na indexação: index on field->campo TAG tatu
Na indexação funciona usar arquivo->campo, mas isso deixa preso ao ALIAS, e nunca se sabe se poderemos usar alias diferente.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Cuidado ao declarar variáveis com M->

Mensagempor JoséQuintas » 31 Mar 2021 08:12

Aqui mais claro:

FUNCTION Main()

   LOCAL a

   a := 10
   m->a := 20
   ? a
   ? m->a

   inkey(0)


Retorna 10, 20
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Cuidado ao declarar variáveis com M->

Mensagempor JoséQuintas » 31 Mar 2021 08:15

FUNCTION Main()

   LOCAL a

   a := 10
   ? a
   ? m->a

   inkey(0)

   RETURN Nil


E aqui.... dá erro de variável não existe no m->a

definitivamente m->variavel indica explicitamente variável diferente de LOCAL.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 15 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro