Dans mon expérience, la plupart des fonctions JS, des fonctions constructeur ou des fonctions de modèle de module sont déclarées comme globales ou sont liées à un objet d'espace de noms global. Dans tous les cas, ces identifiants sont globalement accessibles.Les fonctions doivent-elles être déclarées avec une portée minimale?
De toute ligne de code dans votre système, vous pouvez avoir:
mod1 = somepackage.SomeModule(); // couple to me!
Voici un exemple rapide JS, mais dans d'autres langues l'idée applique. Etant donné que les globales sont considérées comme dangereuses, dans quelle mesure la visibilité des fonctions/classes devrait-elle être restreinte? Quels sont les compromis?
Ma question est un peu motivé par: 'when are globals acceptable', 'alternatives to globals' et 'return of the globals'
Merci!
Je suis d'accord pour réduire la portée est une bonne décision. Ma préoccupation est que, par rapport à une variable portée à un bloc ou une fonction, une variable portée à un paquet est accessible à partir de beaucoup plus de lignes de code. Cela me fait me demander si les constructeurs devraient être définis au plus près de leur site de première utilisation. – James
Je pense que les variables doivent être privées à moins de raisons impérieuses de ne pas le faire (héritage, etc.) –
Il semble que la réduction de la portée réduise également la réutilisabilité, nécessitant des changements de signature de méthode partout où l'usine pourrait être transmise. – James