Página 1 de 1

MenVar é Publica ?

Enviado: 18 Fev 2021 10:09
por Itamar M. Lins Jr.
Olá!
Preciso usar variáveis PRIVATE, mas com "-w3" não posso.
Sendo uma memvar publica, neste caso como apagar ela depois ?

Saudações,
Itamar M. Lins Jr.

MenVar é Publica ?

Enviado: 18 Fev 2021 11:31
por alxsts
Olá!

Use o comando RELEASE

MenVar é Publica ?

Enviado: 18 Fev 2021 12:21
por Itamar M. Lins Jr.
Ola!
Public variables are unaffected by this form of the RELEASE
command. To release public variables, you must RELEASE them explicitly
or use CLEAR MEMORY.
Eu quero é eliminar, não é limpar.
Parece que não tem como.
A forma melhor é começar usar OOP.

Saudações,
Itamar M. Lins Jr.

MenVar é Publica ?

Enviado: 18 Fev 2021 13:39
por JoséQuintas
Declara pro fonte inteiro

Código: Selecionar todos

MEMVAR variavel

PROCEDURE Test

   PRIVATE variavel
Declara só pro módulo

Código: Selecionar todos

PROCEDURE Test
   MEMVAR variavel
   PRIVATE variavel
É isso?
Isso passa no -w3, das duas formas.
é que PRIVATE e PUBLIC não declaram variáveis, é algo... desprezado (pra checagem). e dá erro se não declarar com MEMVAR primeiro.

MenVar é Publica ?

Enviado: 18 Fev 2021 13:47
por Itamar M. Lins Jr.
Olá!
Isso mesmo!

Saudações,
Itamar M. Lins Jr.

MenVar é Publica ?

Enviado: 18 Fev 2021 13:54
por JoséQuintas
Achei isto no hbmemvar.ch

Código: Selecionar todos

/* Values returned from __mvScope() function */
#define HB_MV_NOT_FOUND        -2   /* not found in the symbols table */
#define HB_MV_UNKNOWN          -1   /* not created yet */
#define HB_MV_ERROR             0   /* information cannot be obtained */
#define HB_MV_PUBLIC            1   /* PUBLIC variable */
#define HB_MV_PRIVATE_GLOBAL    2   /* PRIVATE created outside of current function/procedure */
#define HB_MV_PRIVATE_LOCAL     4   /* PRIVATE created in current function/procedure */
#define HB_MV_PRIVATE           6   /* PRIVATE variable */
Parece que MEMVAR expande um pouco o que seria PRIVATE.
Talvez seja usada função pra definir se é PUBLIC,PRIVATE, e por isso precisa declarar primeiro.
E se declarar MEMVAR, até dispensa o PRIVATE, só vai compensar se atribuir valor, e olhe lá.

Código: Selecionar todos

MEMVAR x
PRIVATE x := 10

MenVar é Publica ?

Enviado: 18 Fev 2021 14:02
por JoséQuintas
Só lembrando:

Código: Selecionar todos

Syntax:  harbour <file[s][.prg]|@file> [options]

Options:  -a               automatic memvar declaration
MEMVAR não altera variável de PUBLIC pra PRIVATE, ou vice-versa.
A prova é que dá pra compilar pra ser declarado tudo automático como memvar, aonde não houver declaração (mesmo que exista PUBLIC/PRIVATE).
Só é perigoso usar o automático, porque até nome de campo pode virar variável.

MenVar é Publica ?

Enviado: 18 Fev 2021 14:44
por Fernando queiroz
Itamar M. Lins Jr. escreveu: A forma melhor é começar usar OOP.

Saudações,
Itamar M. Lins Jr.
Depois de uma aula do mestre Quintas sobre OOP já migrei tudo, e o mundo se abriu em possibilidades

hoje declaro as variáveis dentro da classe que aceitam valores vindos de fora (publicas na classe)
ou as variáveis PROTECTED: visíveis em toda a classe mas não visível de fora

Código: Selecionar todos

CREATE CLASS PRODUTOSCLASS

VAR oServer

VAR cDefaultPrinter
VAR cReportOption
VAR nPrinterType
VAR dPeriodoInicial		INIT (M->DAT_HOJE-30)
VAR dPeriodoFinal		INIT (M->DAT_HOJE)


	METHOD New( ParamServer )   INLINE   ::oServer := ParamServer, Self
	METHOD PRODUTOS_MANUTENCAO(  )
	METHOD PRODUTOS_PESQUISA(  )
	METHOD PRODUTOS_PESQUISA_COMPRAS( Fornecedor )
	METHOD PRODUTOS_PESQUISA_TRANSFERENCIA( FINALIDADE )
	METHOD PRODUTOS_PESQUISA_ENTRADA( Fornecedor )

PROTECTED:

VAR IncluiRemoto
VAR AtualizaRemoto
VAR ExcluiRemoto	
VAR ConsultaRemoto
VAR cnConnection
VAR aFiliais 			INIT {}

MenVar é Publica ?

Enviado: 20 Fev 2021 16:12
por asimoes
Eu declaro as variáveis com o seu tipo pra deixar claro

Código: Selecionar todos

VAR oJanela        AS OBJECT    INIT Nil
VAR oDlg_Thread    AS OBJECT    INIT "oDlg_Thread"
VAR bBlock         AS CODEBLOCK INIT Nil
VAR oTimer         AS STRING    INIT "oTimerThread"
VAR nTimer         AS INTEGER   INIT 300 // 5 minutos
VAR cTipo          AS STRING    INIT "B"
VAR lLiga          AS LOGICAL   INIT .F.
VAR nFloat         AS NUMERIC   INIT 0.00
VAR dDataBeneficio AS DATE      INIT CTOD("")
VAR aRegAntes      AS ARRAY     INIT {}
VAR hTable         AS HASH      INIT {=>}