Ich frage mich, ob es Gründe gibt (abgesehen vom Aufräumen des Quellcodes), warum Entwickler die Funktion "Nicht verwendete entfernen Usings
" in Visual Studio 2008 verwenden.
Ich frage mich, ob es Gründe gibt (abgesehen vom Aufräumen des Quellcodes), warum Entwickler die Funktion "Nicht verwendete entfernen Usings
" in Visual Studio 2008 verwenden.
Antworten:
Es gibt einige Gründe, warum Sie sie herausnehmen möchten.
using
Anweisungen, wenn sich Ihr Code im Laufe der Zeit ändert.Auf der anderen Seite gibt es nicht viele Gründe, sie zu belassen. Ich nehme an, Sie sparen sich die Mühe, sie löschen zu müssen. Aber wenn Sie so faul sind, haben Sie größere Probleme!
Ich würde ganz im Gegenteil sagen - es ist äußerst hilfreich, unnötige, unnötige Anweisungen zu entfernen.
Stellen Sie sich vor, Sie müssen in 3, 6, 9 Monaten zu Ihrem Code zurückkehren - oder jemand anderes muss Ihren Code übernehmen und ihn pflegen.
Wenn Sie eine riesige, lange Wäscheliste mit Anweisungen haben, die nicht wirklich benötigt werden, kann das Betrachten des Codes ziemlich verwirrend sein. Warum wird das dort verwendet, wenn nichts von diesem Namespace verwendet wird?
Ich denke, im Hinblick auf die langfristige Wartbarkeit in einem professionellen Umfeld würde ich dringend empfehlen, Ihren Code so sauber wie möglich zu halten - und dazu gehört auch, unnötiges Material daraus zu entfernen. Weniger Unordnung bedeutet weniger Verwirrung und damit höhere Wartbarkeit.
Marc
Dies scheint mir eine sehr vernünftige Frage zu sein, die von den antwortenden Personen ziemlich leichtfertig behandelt wird.
Ich würde sagen, dass jede Änderung des Quellcodes gerechtfertigt sein muss. Diese Änderungen können versteckte Kosten verursachen, und die Person, die die Frage stellt, wollte darauf aufmerksam gemacht werden. Sie haben nicht darum gebeten, "faul" genannt zu werden, wie eine Person nachahmte.
Ich habe gerade angefangen, Resharper zu verwenden, und es gibt Warnungen und Stilhinweise zu dem Projekt, für das ich verantwortlich bin. Dazu gehört die Beseitigung redundanter Maßnahmen mithilfe der Richtlinie, aber auch redundante Qualifikationsmerkmale, Kapitalisierung und vieles mehr. Mein Bauchgefühl ist es, den Code aufzuräumen und alle Hinweise aufzulösen, aber mein Geschäftsleiter warnt mich vor ungerechtfertigten Änderungen.
Wir verwenden einen automatisierten Erstellungsprozess. Daher würde jede Änderung an unserem SVN-Repository Änderungen erzeugen, die wir nicht mit Projekten / Fehlern / Problemen verknüpfen konnten, und automatisierte Erstellungen und Releases auslösen, die keine funktionalen Änderungen an früheren Versionen lieferten.
Wenn wir uns das Entfernen redundanter Qualifizierer ansehen, kann dies möglicherweise zu Verwirrung bei Entwicklern führen, da Klassen, in denen unsere Domänen- und Datenebenen nur durch die Qualifizierer unterschieden werden.
Wenn ich mir die richtige Verwendung der Großschreibung von Anachronymen (dh ABCD -> Abcd) anschaue, muss ich berücksichtigen, dass Resharper keine der XML-Dateien, die wir mit diesen Referenzklassennamen verwenden, umgestaltet.
Das Befolgen dieser Hinweise ist also nicht so einfach, wie es scheint, und sollte mit Respekt behandelt werden.
Zusätzlich zu den bereits genannten Gründen werden unnötige Namenskonflikte vermieden. Betrachten Sie diese Datei:
using System.IO;
using System.Windows.Shapes;
namespace LicenseTester
{
public static class Example
{
private static string temporaryPath = Path.GetTempFileName();
}
}
Dieser Code wird nicht kompiliert, da beide Namespaces System.IO und System.Windows.Shapes jeweils eine Klasse namens Path enthalten. Wir könnten es beheben, indem wir den vollständigen Klassenpfad verwenden.
private static string temporaryPath = System.IO.Path.GetTempFileName();
oder wir könnten einfach die Linie entfernen using System.Windows.Shapes;
.
Weniger Optionen im Intellisense-Popup (insbesondere wenn die Namespaces viele Erweiterungsmethoden enthalten).
Theoretisch sollte Intellisense auch schneller sein.
Entferne sie. Weniger Code zum Anschauen und Staunen spart Zeit und Verwirrung. Ich wünschte, mehr Leute würden die Dinge einfach, ordentlich und ordentlich halten. Es ist, als hätten Sie schmutzige Hemden und Hosen in Ihrem Zimmer. Es ist hässlich und man muss sich fragen, warum es da ist.
Code wird schneller kompiliert.
Kürzlich habe ich einen weiteren Grund bekommen, warum das Löschen nicht verwendeter Importe sehr hilfreich und wichtig ist.
Stellen Sie sich vor, Sie haben zwei Baugruppen, von denen eine auf die andere verweist (nennen wir zunächst die erste A
und die referenzierte B
). Wenn Sie nun Code in A haben, der von B abhängt, ist alles in Ordnung. Irgendwann in Ihrem Entwicklungsprozess stellen Sie jedoch fest, dass Sie diesen Code tatsächlich nicht mehr benötigen, sondern die using-Anweisung dort belassen, wo sie war. Jetzt haben Sie nicht nur eine bedeutungslose using
Direktive, sondern auch eine Assembly-Referenz, auf B
die nur in der veralteten Direktive verwiesen wird. Dies erhöht zum einen den Zeitaufwand für das Kompilieren A
, der B
ebenfalls geladen werden muss.
Dies ist also nicht nur ein Problem in Bezug auf saubereren und leichter lesbaren Code, sondern auch in Bezug auf die Beibehaltung von Assembly-Referenzen im Produktionscode, wo nicht alle Assemblys, auf die verwiesen wird, überhaupt existieren .
Schließlich mussten wir in unserem Beispiel B und A zusammen versenden, obwohl B nirgendwo in A, sondern in der using
Sektion verwendet wird. Dies wirkt sich massiv auf die LaufzeitleistungA
beim Laden der Baugruppe aus.
Zumindest theoretisch sollten Sie in der Lage sein, den Code zu betrachten und eine Umgebung zu erstellen, die alles simuliert, was benötigt wird, wenn Sie eine C # .cs-Datei (oder eine einzelne Programmquellcodedatei) erhalten haben. Mit einigen Kompilierungs- / Parsing-Techniken können Sie sogar ein Tool erstellen, das dies automatisch ausführt. Wenn Sie dies zumindest im Auge behalten, können Sie sicherstellen, dass Sie alles verstehen, was in der Codedatei steht.
Überlegen Sie nun, ob Sie eine CS-Datei mit 1000 using
Anweisungen erhalten haben, von denen nur 10 tatsächlich verwendet wurden. Wenn Sie sich ein Symbol ansehen, das neu in den Code eingeführt wurde, der auf die Außenwelt verweist, müssen Sie diese 1000 Zeilen durchgehen, um herauszufinden, was es ist. Dies verlangsamt offensichtlich das obige Verfahren. Wenn Sie sie also auf 10 reduzieren können, hilft es!
Meiner Meinung nach ist die C # using
-Direktive sehr, sehr schwach, da Sie kein einzelnes generisches Symbol angeben können, ohne dass die Generizität verloren geht, und Sie können keine using
Alias-Direktive verwenden, um Erweiterungsmethoden zu verwenden. Dies ist in anderen Sprachen wie Java, Python und Haskell nicht der Fall. In diesen Sprachen können Sie (fast) genau angeben, was Sie von der Außenwelt erwarten. Aber dann werde ich vorschlagen, using
wann immer möglich einen Alias zu verwenden .