Codi i Dades: Privat o Públic


Als projectes visuals, totes les dades i constants dels objectes Window, MDIWindow o DialogBox són privades, és a dir, només accessibles al propi objecte i als seus controls fill. Per tal de compartir les dades amb altres objectes del projecte, podeu afegir fitxers Include o objectes Mòdul. Els Mòduls són objectes de codi, que significa que no tenen cap finestra ni poden contenir controls, però totes les variables i procediments que hi ha a dins són Public per defecte, és a dir, comuns a tot el projecte. Això NO és aplicable a les macros ni a les estructures, que només són visibles dins la finestra o mòdul on estan definides (a menys que es defineixin en un fitxer include com s'explica tot seguit).

Els fitxers Include també poden ser comuns a tot el projecte si s'afegeixen de la manera correcta. Si voleu que un fitxer Include sigui comú a tot el projecte, feu el següent:

Per a fitxers include del MASM32 SDK o de programació de drivers, utilitzeu l'opció de menú "Projecte=>Afegeix fitxers Include (*.inc)..."
Per a qualsevol altre tipus de fitxer include, utilitzeu l'opció de menú "Projecte=>Afegeix Fitxers..." (si el fitxer és en una altra carpeta, serà copiat a la carpeta del projecte)
Si s'afegeixen d'aquesta manera, els fitxers include s'inclouen sempre quan es compilen tots els altres fitxers del projecte (finestres i mòduls), per tant, no poden tenir procediments ni declaracions de variables, altrament, es produiran errors de redefinició (uns bons exemples de fixters include són els que vénen amb el MASM32 SDK). D'altra banda, els fitxers include són molt útils per a definir macros i/o estructures que hagin de ser comuns a tot el projecte (per exemple, el fitxer Common.inc del projecte NetMon, a la carpeta Examples).

Els objectes Mòdul són propis de l'Easy Code i han d'estar estructurats correctament per evitar errors de programació. Per tal que els mòduls funcionin degudament, cal tenir en compte una regla molt important:
Les seccions .Const, .Data? i .Data, han d'estar SEMPRE abans de la secció .Code de la manera següent:
.Const

.Data?

.Data

.Code
De fet, l'ordre de les seccions .Const, .Data? i .Data no té cap importància, el que és imprescindible és que només hi hagi una secció .Code dins d'un mòdul i que sigui l'última de totes les seccions.
Un mòdul pot ser molt útil per contenir variables i procediments que siguin referenciats per qualsevol altre objecte (finestra o mòdul), atès que totes les seves variables i procediments són comuns a tot el projecte. Tanmateix, si voleu que les dades d'un mòdul siguin privades, feu el següent:

Per projectes visuals:

Poseu la propietat PublicData a FALSE

Per projectes clàssics:

Desmarqueu l'opció Fes globals totes les variables de les Propietats del projecte


Per als objectes Window, MDIWindow i DialogBox, l'Easy Code declara els procediments com a Private per defecte, mentre que per als objectes Module els declara com a Public. Com que l'Easy Code ignora la directiva Option Proc, tots els procediments són Public, si no es declaren explícitament com a Private, per tal que puguin ser accedits per qualsevol altre objecte del projecte. De fet, tots els procediments són Public per defecte si no es declaren Private ni Public, per tant, els procediments següents són exactament iguals:

AnyName Proc
    Ret
AnyName EndP

i

AnyName Proc Public
    Ret
AnyName EndP


Si voleu que un procediment sigui privat, heu d'afegir-li la corresponent paraula reservada (Private), i llavors només serà accessible dins de l'objecte on es troba:

AnyName Proc Private
    Ret
AnyName EndP

Per tant, si poseu la propietat PublicData a FALSE (projectes visuals), o desmarqueu l'opció Fes globals totes les variables (projectes clàssics), i tots els procediments són declarats com a Private, tindreu un mòdul privat, és a dir, només accessible des del propi mòdul. D'altra banda, posant la propietat PublicData a TRUE (projectes visuals), o marcant l'opció Fes globals totes les variables (projectes clàssics), i no declarant com a Private cap dels seus procediments, donarà com a resultat un mòdul públic, on les dades i el codi seran accessibles des de qualsevol altre objecte del projecte.

És una bona pràctica mantenir com a Private tots els procediments d'un objecte finestra (projectes visuals) i afegir un o més fitxers Include (o mòduls) per compartir el codi i les dades que siguin comunes. D'aquesta manera el vostre codi serà més clar, semblant a llenguatges de més alt nivell, i menys exposat a errors. Així funciona l'Easy Code quan escriu codi per un procediment: tots els procediments d'un objecte finestra són declarats Private (a menys que els feu Public), mentre que tots els procediments d'un objecte mòdul són declarats Public (a menys que els feu explícitament Private). De fet, l'Easy Code no escriu ni Public ni Private, la qual cosa significa que són Public.

OBSERVACIONS: L'Easy Code se'n cuida dels prototips de tots els procediments existents al projecte. Per tant, NO CAL escriure ni incloure cap sentència Proto, per què no es necessiten en els projectes de l'Easy Code.

IMPORTANT: Recordeu que l'Easy Code ignora la directiva Option Proc, per tant, per tal que un procediment sigui privat, cal que inclogui la paraula reservada corresponent (Private). Si no el declareu ni Public ni Private, el procediment serà considerat Public.