Variables Públicas.
Deben declarse como tales antes de asignarle valor. caso contrario da error.
Una variable pública, una vez declarada, es visible en cualquier otro punto del programa.
Uso: Son para casos muy especiales. Por diseño, solo deben ser "cargadas" en un solo punto del programa, la idea es que fijen datos de caracter general y luego sean usadas en procesos/funciones de orden inferior.
En algunos casos, es admisible que un modulo "llamado" declare una variable pública, pero es algo muy extraño, porque los modulos llamadores u otros de igual nivel, estarían fuertemente acoplados a que un procedimiento de nivel inferior o intermedio haya o no declarado esa variable.
Normalmente, si se necesitan pasar datos "extras" entre distintas partes del programa, se crea una propiedad en _screen (addproperty) y su existencia puede verificarse con pemstatus, de esa manera, no hay tanto acomplamiento.
Otro caso de uso de publicas, es que haya un procedimiento, que carga ciertos datos, siempre se ejecuta primero y los deja públicos.
Lo aconsejable, es minimizar lo más posible el uso de variables públicas y restringirlas a situaciones muy específicas y documentadas.
Por supuesto, cada cual queda en libertad de acoplarse mal y pagar las consecuencias.
Variables privadas.
Las variables privadas en realidad no se declaran.
Una sentencia PRIVATE lo que hace es ocultar a partir de la misma, cualquier variable declarada en módulos superiores que se llamen igual a otras que se asignen a continuación (no en private).
En xbase, una variable declarada en un modulo, es private (salvo public o local expresa) desde ese módulo hacia abajo (o sea desde donde se asigna, será accesible en el procedimiento o función y llamados directa o indirectamente desde alli (salvo local o private en los llamados) no pudiendo declararse luego public.
Cuando no existia el manejo de variables locales, era la forma de encapsular variables, para evitar acoplamiento entre procedimientos y funciones.
Usar variables privadas para pasar datos entre procedimientos y funciones, solo se justifica en estructuras jerárquicas (o sea, se llama a algo que siempre está en una rama inferior al punto de declarar la privada).
El uso de secretari@ privadas puede traer sus problemas si no se tiene en cuenta el ámbito donde se efectúa (salvo single)
Variables locales.
Se crean con LOCAL (con valor falso), toda variable usada en un procedimiento, función método debería ser declarada local, para un mínimo acoplamiento.
Propiedades.
Cuando se trabaja con clases y objetos (que es el caso de los formularios), lo más común es usar la memoria colectiva de la clase y crear propiedades.
Las propiedades públicas (son todas, salvo expreso en contrario) pueden usarse en cuaquier parte del objeto instanciado, puede ser accedido desde fuera de la clase o sus herederas, o sea, son públicas mientras el objeto exista.
Las propiedades protected, solo pueden acceder dentro de la clase y clases heredadas
Las propiedades hidden, solo pueden accederse dentro de la clase (no en sus herederas).
Nunca le vi mucha aplicación al uso de propiedades no públicas, solo se justifica en jerarquias de clases, donde en las clase superior/es, se ejecuta algún método siempre, que prepara algo y las clases que heredan, solo aprovechan los efectos pero no la usan.
Para pasar más de un dato de retorno, tenemos dos opciones básicas.
La opción Fox DOS, que es pasar un arreglo por referencia como parámetro, ese parámetro se carga con todos los valores necesarios y cuando se vuelve al punto de llamada, ese parámetro pasado por referencia, tiene todos los datos que se cargaron en el llamado.
La otra, ya en VFP, es devolver un objeto (empty, rellenado, collection) o alguna propiedad agregada al screen (que hay que ser prolijo).
Mucha veces el Sida se propaga por el uso de public@s sin debidos recaudos.
Saludos: Miguel, La Pampa (RA)
Larga Vida y Prosperidad
Que la Fuerza los acompañe si usan publicas inapropiadamente