CompilerIf
et
CompilerEndIf
pt de vue programmation, c'est à peu près la même que If...EndIf.
CompilerIf est une directive, non pas une instruction. Comparaison.
CompilerIf est testé à la compilation de l'EXE, pas à l'exécution.
CompilerIf va donc être plus rapide, même si ce n'est pas simplement comparable.
CompilerIf interdit tout sauf des constantes.
CompilerIf dans une macro se moque de la forme de l'objet que l'on teste, tant que cette objet est l'attribut d'une directive ou une constante, et tant qu'on la coffre dans une chaîne entre guillemets. C'est la raison même du trifouilli que tu vois après CompilerIf.
La réalité c'est que je lui demande de me vérifier quel type a été utilisé dans la définition.
Là, j'ai 'shunté' la directive 'Define' par la macro 'Definit'.
Résultat, au lieu de faire une simple définition de variable, on a cette définition + un enregistrement de la variable.
Revenons à l'essentiel (n'hésite pas quand même pour des questions évidemment)
Pour recenser une variable, son type, et sa visibilité dans le code, on shunte les directives qui les définissent.
Coup de chance: c'est la même syntaxe.
Pour définir par exemple un nombre flottant double précision, c'est:
Define Nombre.D ; D c'est le type (cf doc)
Global Nombre.D
Protected Nombre.D
Shared Nombre.D
Static Nombre.D
Define définit une variable visible hors des procédures.
Global définit une variable visible partout.
Protected c'est l'équivalent de Define mais pour définir une variable éphémère dans une procédure (la valeur de la variable est toujours nulle au départ de la procédure).
Static c'est comme protected mais pour définir une variable persistante au sein d'une procédure (pas de RAZéro au sortir de la procédure).
Shared c'est pour aller choper, depuis une procédure une variable hors d'une procédure.
Il faut donc déjà 5 macros qui ressemblent à 'Definit()' pour récolter les infos sur les variables.
Pour les listes et maps, ce sont juste des types supplémentaires à créer, et les adresses de chaque élément sont accessibles de 2 manières (c'est pour ça que tu me vois expliquer avec 2 versions: à l'ancienne, ou moderne, plus concrètement et respectivement, sans structure ou avec structure)
Sans structure: (à l'ancienne)
Code : Tout sélectionner
NewList L.I()
NewMap M.I()
AddElement(L() )
L() = 10
Debug "Adresse élément liste : " + @L()
M("MaClef") = 25
Debug "Adresse élément map : " + @M("MaClef")
Avec structure: (moderne)
Code : Tout sélectionner
NewList L.INTEGER()
NewMap M.INTEGER()
AddElement(L() )
L()\I = 10
Debug "Adresse élément liste : " + L()
M("MaClef")\I = 25
Debug "Adresse élément map : " + M("MaClef")
En espérant que ce jeu des 6 différences t'apportent des indices suffisant pour passer d'une méthode à l'autre...