Aller au contenu

tester l'existence d'une variable globale


Messages recommandés

Posté(e)

bonjour

 

je suis en train de faire un code pour calculer des fils d'eau sur une polyligne suivant une pente.

 

au lancement de la fonction j'initialise l'altimétrie de départ à 0 ou une valeur saisie au clavier

jusque là, ça va...

mais régulièrement, je teste plusieurs trajet avec la même alti de départ, et c'est un peu pénible de devoir à chaque fois la retaper. Les variables globale devrai pouvoir me sortir de cet embarras.

 

Mais comment tester si c'est la 1ere fois que je lance le programme et que la variable n'existe pas et que je dois donc l'initialiser ou bien que cette variable est présente dans le dessin et donc pouvoir la réutiliser ?

 

merci

Posté(e)

Bonsoir,

 

Mais comment tester si c'est la 1ere fois que je lance le programme et que la variable n'existe pas et que je dois donc l'initialiser ou bien que cette variable est présente dans le dessin et donc pouvoir la réutiliser ?

 

 

Pour le principe, (à placer au début de ton programme)

 

(or *MaVariableGlobal* (setq *MaVariableGlobal* (getreal "\nMa valeur à saisir:  ")))

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Salut,

 

Certains trouvent, peut-être à juste raison, la syntaxe avec (or ...) peu explicite.

Tu peux préférer l'utilisation de (if (not ...)) : si la variable n'est pas assignée (elle est nil), alors on invite l'utilisateur à entrer une valeur :

(if (not *MaVariableGlobal*)
 (setq *MaVariableGlobal* (getreal "\nMa valeur à saisir:  "))
)

ou, encore plus explicite :

(if (not (boundp *MaVariableGlobal*))
 (setq *MaVariableGlobal* (getreal "\nMa valeur à saisir:  "))
)

 

Dans tous les cas précédents, si l'utilisateur n'entre pas de valeur (en faisant enter par exemple) la routine va continuer avec *MaVariableGlobal* à nil et génèrera une erreur quand le code essayera d'utiliser cette valeur.

Une méthode plus sure est donc de forcer l'utilisateur à entrer une valeur avec while par exemple (seul un Echap permet de sortir du while sans entrer de valeur et interrompt l'exécution de la routine). Ceci permet aussi de tester le type de valeur de *MaVariableGlobal* si elle est déjà assignée.

(while (not (numberp *MaVariableGlobal*))
 (setq *MaVariableGlobal* (getreal "\nMa valeur à saisir:  "))
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour,

 

Certains trouvent, peut-être à juste raison, la syntaxe avec (or ...) peu explicite.

C’est vrai , la ligne de code aurait mérité une ou deux petites lignes d’explications, il était tôt/tard et j’étais pressé de finir cette journée.

 

Sinon en variante possible au while un appel à initget et le code de bit qui va bien (réglé sur 1 pour éviter les saisie null)

(cond ((numberp *MaVariableGlobal*))
     (T (initget 1) (setq *MaVariableGlobal* (getreal "\nMa valeur à saisir:  ")))
)

 

A+

Apprendre => Prendre => Rendre

Posté(e)

^^

c'est pas du luxe d'être super explicite...

 

je met pour le 1er fois un pied dans le monde merveilleux de la programmation, grace à la lecture attentive de ton introduction à Autolisp

je tien à te féliciter pour la rédaction de ce manuel d'initiation qui reste simple sans être simpliste et néanmoins suffisamment complet et détaillé pour m'apporter enfin de vrai bases.

 

Pour m'être essayer parfois à cet exercice, je sais que c'est pas facile d'expliquer aussi bien des concepts qui nous paraissent évidents.

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité