PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Variable "constante"
Variable "constante"
Iniciado por Ramirez22, 30,oct. 2018 19:41 - 5 respuestas
Miembro registrado
60 mensajes
Publicado el 30,octubre 2018 - 19:41
Bonjour,

Je cherche à savoir s'il existe un type de variable à "affectation unique", mais pas une constante dans le pur type CONSTANT.
J'aimerais que par exemple je déclare une variable "cheminFichier" de type texte, qui j'y affecte une valeur contenue dans un fichier INI et que si dans le programme j'essaye de la modifier (erreur de programmation), soit j'ai un message d'erreur, soit la constante ne change pas.

la déclaration de CONSTANT dans le code d'initialisation du programme ne fonctionne qu'avec des valeurs constante.
Je ne peux donc pas saisir :
CONSTANT
a = INILit(...)
FIN

Je suis obligé de faire
CONSTANT
a = "c:\blabla"
FIN


Une idée ?
Miembro registrado
334 mensajes
Publicado el 30,octubre 2018 - 20:39
Une classe avec un contrôle du contenu grace aux guetter et setter peut-être !

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Mensaje modificado, 30,octubre 2018 - 20:41
Miembro registrado
1.640 mensajes
Publicado el 31,octubre 2018 - 09:55
L'idée de dergen est bonne je pense.

Tu peux créer une classe dans laquelle tu va regrouper toutes tes variables de ce genre.
Ensuite tu controle l'accès avec des propriétés.
Les membres de ta classe seront donc des membres privés.

Ensuite, dans la propriété d'ecriture, il suffit de faire un truc du genre :
m_sVariableConstante = m_sVariableConstante = "" ? sValeur SINON m_sVariableConstante
Miembro registrado
60 mensajes
Publicado el 01,noviembre 2018 - 08:18
Bonjour à vous,

Je vais creuser dans ce sens, merci beaucoup.
Miembro registrado
96 mensajes
Publicado el 05,noviembre 2018 - 09:29
Bonjour,

pourriez-vous nous expliquer quel est l'objectif de cette manipulation ? Est-ce pour permettre à l'utilisateur d'utiliser du code compilé dynamiquement ?

Sinon, sans s'embêter avec l'utilisation des classes, vous pouvez simplement utiliser une fonction.
Et si vous souhaitez que l'initialisation ne se fasse qu'une seule fois, vous pouvez utiliser le système des closures.

Petit exemple
ma_fonction_constante est une Procedure = créer_constante(lire_valeur())

Trace(ma_fonction_constante())
Trace(ma_fonction_constante())
Trace(ma_fonction_constante())

Procedure créer_constante(LOCAL valeur_constante)
PROCEDURE INTERNE _ma_closure()
RENVOYER valeur_constante
FIN

ma_closure est une Procedure = _ma_closure

RENVOYER ma_closure

Procedure lire_valeur()
Trace("Lire la valeur")
RENVOYER "coucou"


Vous aurez ainsi une procédure qui contient la valeur constante que vous souhaitez utiliser. Cette valeur ne sera pas modifiable (sauf en réutilisant la fonction créer_constante).

On aura une seule fois la lecture de la valeur (via lire_valeur) mais on pourra réutiliser la valeur plusieurs fois (via ma_fonction_constante).

Cela vous évite de créer une classe (vous pouvez mettre le code dans une collection de procédure (voire dans une procédure de fenêtre).

Si vous souhaitez plus de détail sur les closures, n'hésitez pas !

je vous souhaite une bonne journée.

--
Johjo aka Jonathan Laurent

Codez mieux ! Codez plus vite !

Mon blog sur WinDev : http://www.ytreza.org
Me contacter sur slack (wx-community) : https://frama.link/BoBD0SY0
Faîtes moi un ping : http://www.ytreza.org/fr/services/ping-sur-forum
Miembro registrado
60 mensajes
Publicado el 06,noviembre 2018 - 15:55
Bonjour.

OUCH !
Bon, je crois que j'ai compris le concept, mais va falloir que je creuse un peu pour bien l’appréhender.
Merci en tout cas, cela va me permettre d'approfondir mon ignorance de Windev :D

Bonne fin de journée