Salut, j'essaie de comprendre comment limiter au mieux mon risque en ce qui concerne la portée locale des fonctions. D'après ce que j'ai compris, mes options pour limiter le potentiel de pollution de la portée Here à partir de l'exécution d'une fonction consistent à déclarer mes variables locales ou à utiliser Default Local. Cependant, chacun d'entre eux a quelques problèmes:
Locale par défaut :
- Les valeurs de référence peuvent dépendre du contexte, car les noms qui n'ont pas été définis localement se replient sur Ici, puis éventuellement (si les noms par défaut ici sont désactivés) Global puis sur la table actuelle. Comme indiqué dans la documentation, cela peut signifier que le comportement est moins prévisible car les valeurs dépendent du contexte.
Déclaration explicite :
- Les valeurs de référence peuvent dépendre du contexte, puisque les noms utilisent toujours ce comportement de secours jusqu'à ce qu'ils soient déclarés s'ils ne sont pas déclarés dans les noms locaux
- Les affectations peuvent accidentellement fuir dans la portée Here. Autrement dit, si un nom destiné à être local est omis des déclarations de nom local, il polluera la portée Here environnante
- Généralement, cette pollution à portée extérieure est difficile à détecter.
- Par exemple, si vous appelez une fonction dans un For où vous utilisez "i" comme itérateur et que cette fonction a également un For qui utilise i et ne parvient pas à le déclarer comme local, cela affectera votre boucle For externe. Certes, il s'agit d'une erreur évidente du programmeur, mais elle est facile à faire et difficile à déboguer.
Dans mon esprit, l'option idéale serait capable de déclarer quelque chose comme "Strict Local", qui traiterait toujours les noms non qualifiés (à la fois lors de l'attribution de valeurs et des valeurs de référence) car les portées locales et environnantes ne seraient accessibles qu'avec des noms qualifiés. Cela me permettrait de ne pas risquer de polluer les champs d'application environnants et de m'obliger à déclarer quand je dépends de ces champs d'application, limitant ainsi la pollution locale des champs d'application environnants.