Pourquoi supprimer les directives inutilisées en C #?

Je me demande s’il existe des raisons (en dehors du nettoyage du code source) pour lesquelles les développeurs utilisent la fonctionnalité “Supprimer les utilisations non Usings ” dans Visual Studio 2008?

Il y a quelques raisons pour lesquelles vous voudriez les sortir.

  • C’est inutile. Ils n’apportent aucune valeur.
  • C’est confu. Qu’est-ce qui est utilisé à partir de cet espace de noms?
  • Si vous ne le faites pas, vous accumulerez peu à peu des informations inutiles en using relevés au fur et à mesure que votre code évolue.
  • L’parsing statique est plus lente.
  • La compilation du code est plus lente.

D’un autre côté, il n’y a pas beaucoup de raisons de les laisser. Je suppose que vous vous évitez de devoir les supprimer. Mais si vous êtes paresseux, vous avez de plus gros problèmes!

Je dirais plutôt le contraire – il est extrêmement utile de supprimer les déclarations inutiles et inutiles.

Imaginez que vous deviez revenir à votre code en 3, 6 ou 9 mois – ou que quelqu’un d’autre doive prendre en charge votre code.

Si vous avez une longue liste d’utilisation d’énoncés qui n’est pas vraiment nécessaire, il peut être assez déroutant de regarder le code. Pourquoi utilise-t-il là-dedans, si rien n’est utilisé depuis cet espace de noms?

En termes de maintenabilité à long terme dans un environnement professionnel, je suggère fortement de garder votre code aussi propre que possible – et cela inclut le vidage de produits inutiles. Moins d’encombrement est synonyme de moins de confusion et donc de maintenabilité supérieure.

Marc

Cela me semble être une question très sensible, qui est traitée de manière assez désinvolte par les personnes qui répondent.

Je dirais que toute modification du code source doit être justifiée. Ces changements peuvent avoir des coûts cachés et la personne qui pose la question souhaite en être informée. Ils n’ont pas demandé à être qualifiés de “fainéants”, comme une personne l’a fait.

Je viens de commencer à utiliser Resharper, et il commence à donner des avertissements et des conseils de style sur le projet dont je suis responsable. Parmi celles-ci, la suppression des directives d’utilisation redondantes, mais aussi des qualificatifs redondants, des majuscules et bien d’autres encore. Mon instinct est de ranger le code et de résoudre tous les problèmes, mais mon chef d’entreprise me met en garde contre les changements injustifiés.

Nous utilisons un processus de génération automatisé et, par conséquent, toute modification apscope à notre référentiel SVN génèrerait des modifications que nous ne pourrions pas lier aux projets / bogues / problèmes, et déclencherait des versions automatisées et des versions qui n’apporteraient aucun changement fonctionnel aux versions précédentes.

Si nous examinons la suppression des qualificatifs redondants, cela risque de créer de la confusion chez les développeurs en tant que classes. Nos couches Domain et Data ne sont différenciées que par les qualificateurs.

Si je regarde l’utilisation correcte de la capitalisation des anachronymes (c.-à-d. ABCD -> Abcd), je dois tenir compte du fait que Resharper ne refactore aucun des fichiers XML que nous utilisons pour les noms de classes de référence.

Donc, suivre ces conseils n’est pas aussi simple qu’il y paraît et doit être traité avec respect.

Moins d’options dans la fenêtre contextuelle Intellisense (particulièrement si les espaces de noms contiennent beaucoup de méthodes d’extension).

Théoriquement, Intellisense devrait être plus rapide aussi.

Outre les raisons déjà mentionnées, cela évite les conflits de noms inutiles. Considérez ce fichier:

 using System.IO; using System.Windows.Shapes; namespace LicenseTester { public static class Example { private static ssortingng temporaryPath = Path.GetTempFileName(); } } 

Ce code ne comstack pas car les espaces de noms System.IO et System.Windows.Shapes contiennent chacun une classe appelée Path. Nous pourrions résoudre ce problème en utilisant le chemin de classe complet,

  private static ssortingng temporaryPath = System.IO.Path.GetTempFileName(); 

ou nous pourrions simplement supprimer la ligne en using System.Windows.Shapes; .

Retirez-les. Moins de code à regarder et à s’interroger permet d’économiser du temps et de la confusion. Je souhaite que plus de gens gardent les choses simples, nettes et rangées. C’est comme avoir des chemises et des pantalons sales dans votre chambre. C’est moche et il faut se demander pourquoi c’est là.

Cela permet également d’éviter de fausses dépendances circulaires, en supposant que vous pouvez également supprimer certaines références dll / project de votre projet après avoir supprimé les utilisations non utilisées.

Le code comstack plus rapidement.

Au moins en théorie, si vous receviez un fichier C # .cs (ou un fichier de code source de programme unique), vous devriez pouvoir regarder le code et créer un environnement qui simule tout ce dont il a besoin. Avec une technique de compilation / parsing, vous pouvez même créer un outil pour le faire automatiquement. Si cela est fait par vous au moins en tête, vous pouvez vous assurer de comprendre tout ce que dit le fichier de code.

Maintenant, considérez, si vous avez reçu un fichier .cs avec 1000 en using directives dont seulement 10 a été réellement utilisé. Chaque fois que vous regardez un symbole nouvellement introduit dans le code qui fait référence au monde extérieur, vous devez parcourir ces 1000 lignes pour déterminer ce que c’est. Cela ralentit évidemment la procédure ci-dessus. Donc, si vous pouvez les réduire à 10, cela aidera!

À mon avis, la directive C # using est très faible, car vous ne pouvez pas spécifier un seul symbole générique sans perte de généricité, et vous ne pouvez pas utiliser la directive alias pour utiliser des méthodes d’extension. Ce n’est pas le cas dans d’autres langages comme Java, Python et Haskell. Dans ces langages, vous pouvez spécifier (presque) exactement ce que vous voulez du monde extérieur. Mais alors, je suggèrerai d’utiliser using alias autant que possible.

Récemment, j’ai eu une autre raison pour laquelle la suppression des importations non utilisées est très utile et importante.

Imaginons que vous ayez deux assemblages, l’un faisant référence à l’autre (pour le moment appelons le premier A et le référencé B ). Maintenant, quand vous avez du code dans A qui dépend de B, tout va bien. Cependant, à un certain stade de votre processus de développement, vous remarquez que vous n’avez plus besoin de ce code, mais vous laissez la déclaration d’utilisation à l’endroit où elle se trouvait. Maintenant, non seulement vous using -directive, mais aussi une référence d’ assembly à B qui n’est utilisée nulle part ailleurs que dans la directive obsolète. Cela augmente d’abord la quantité de temps nécessaire pour comstackr A , car B doit également être chargé.

Il ne s’agit donc pas seulement d’un problème de code plus propre et plus facile à lire, mais également de la maintenance des références d’assemblage dans le code de production où tous ces assemblys référencés n’existent pas tous.

Enfin, dans notre exemple, nous avons dû expédier B et A ensemble, bien que B ne soit utilisé nulle part dans A mais dans la section using . Cela affectera massivement la performance d’ exécution de A lors du chargement de l’assemblage.