Le chargement conditionnel et les constantes définies par l'utilisateur
Une combinaison entre le chargement conditionnel et les constantes définies par l'utilisateur offre de puissantes possibilités de paramétrage. Une utilisation courante est la graduation de paramètres. En fonction des conditions, les paramètres de mêmes noms vont posséder des valeurs différentes. Cette technique réduit le nombre de règles nécessaires et rend le code plus lisible.
Exemple :
#load-if-defined DEATH-MATCH
(defconst dark-age-villagers 6) ; Règle 1
#else
(defconst dark-age-villagers 22) ; Règle 2
#end-if
En mode combat à mort le nombre de villageois est réduit par rapport aux
autres parties.
Remarque :
Une constante ne peut être redéfinie avec une nouvelle valeur
:
(defconst ma-constante 1)
(defconst ma-constante 2)
Ce code provoquera l'erreur ERR2012: Constant Already Defined: ma-constante
(Constante déjà définie : ma-constante)
Par contre,
(defconst ma-constante 1)
(defconst ma-constante 1)
ce code ne provoquera pas d'erreur car la constante conserve la même valeur.
Cependant, ce genre de code n'apporte aucun intérêt ...
Dans notre exemple, les règles 1 et 2 ne sont jamais chargées ensemble, on se
trouve toujours soit dans le cas 1, soit dans le cas 2 donc on ne rencontre pas
l'erreur ERR2012.