Je débute en programmation AutoLISP pour AutoCAD et j’aimerais comprendre la fonction (setq). Comment fonctionne-t-elle pour stocker des informations et quelles sont les bonnes pratiques pour l’utiliser efficacement, notamment concernant la portée des variables ?
La fonction (setq) est le pilier de la gestion des données en AutoLISP, permettant de créer et d’assigner des valeurs à des variables. Elle est essentielle pour la persistance des informations au sein de vos programmes, agissant comme la « mémoire » de votre script.
Voici comment l’utiliser et les concepts clés à maîtriser :
-
Comprendre le concept de variable (La « Boîte à Chaussures ») :
- Imaginez une variable comme une boîte nommée. Le Nom sur la boîte est la variable (ex:
Rayon,MonNom), et ce qu’il y a dedans est sa valeur (ex:10.5,"Patrick", ou un point(10 20)). setqpermet de créer cette boîte, d’y mettre une valeur, et de la poser sur l’étagère de la mémoire d’AutoCAD. Vous pouvez ensuite récupérer le contenu de la boîte en appelant son nom.
- Imaginez une variable comme une boîte nommée. Le Nom sur la boîte est la variable (ex:
-
Maîtriser la syntaxe de base :
- La syntaxe est simple :
(setq variable valeur). Le nomsetqvient de l’anglais « SET Quote » (Fixer une valeur). - Exemple 1 (Un nombre) :
Traduction : Crée une variable(setq Rayon 10.5)Rayonet lui assigne la valeur10.5. - Exemple 2 (Du texte) :
Traduction : Crée une variable(setq MonNom "Patrick")MonNomet lui assigne la chaîne de caractères"Patrick".
- La syntaxe est simple :
-
Optimiser avec les assignations multiples (Le « Combo ») :
- Vous n’êtes pas obligé d’utiliser
(setq)pour chaque variable. Vous pouvez assigner plusieurs variables en une seule ligne :
AutoCAD comprend :(setq a 10 b 20 c 30)aprend la valeur10,bprend20, etcprend30.
- Vous n’êtes pas obligé d’utiliser
-
Gérer la portée des variables (Astuce de Pro) :
- C’est un aspect crucial pour éviter les conflits et maintenir la propreté de votre code. La portée détermine où et quand une variable est accessible.
- Variables Locales : Elles sont accessibles uniquement à l’intérieur de la fonction AutoLISP où elles sont déclarées. Pour les définir, vous devez les lister après le nom de la fonction et avant le corps du code, précédées d’un slash (
/).
Dans cet exemple,(defun c:TEST-MEMOIRE (/ Nombre1 Nombre2 Resultat) (setq Nombre1 50) (setq Nombre2 2) (setq Resultat (* Nombre1 Nombre2)) (princ (strcat "Le résultat est : " (itoa Resultat))) (princ) )Nombre1,Nombre2etResultatne seront connus que de la fonctionTEST-MEMOIRE. - Variables Globales : Si une variable n’est pas déclarée comme locale dans une fonction, elle devient globale. Cela signifie qu’elle est accessible depuis n’importe quel autre programme LISP chargé, ou même directement depuis la ligne de commande d’AutoCAD en la préfixant d’un point d’exclamation (ex:
!MaVariable).- Bonne pratique : Il est fortement recommandé de déclarer vos variables comme locales autant que possible. Cela évite les effets de bord indésirables où une variable utilisée dans une fonction pourrait écraser ou être écrasée par une variable de même nom dans une autre partie de votre code ou par l’utilisateur. Les variables globales doivent être utilisées avec parcimonie et uniquement lorsque leur persistance et leur accessibilité à l’échelle du dessin sont absolument nécessaires.
En résumé, (setq) est le moyen fondamental de stocker et de manipuler des informations dans vos scripts AutoLISP. La compréhension de sa syntaxe et, surtout, de la gestion de la portée des variables est essentielle pour écrire des programmes robustes et sans erreur.