Z jakich powodów powinienem utrzymywać czystość sekcji „używanie” w C #?

11

Pewnego razu, gdy refaktoryzowałem kod, przeszedłem do IDE do sekcji używającej mojej klasy C #, wyczyściłem nieużywane przestrzenie nazw i zduplikowane przestrzenie nazw i posortowałem je wszystkie.

Moja para (programowanie par) zapytała mnie o powód. Nie miałem pojęcia, dlaczego to zrobiłem. Zrobiłem to z przyzwyczajenia, aby cały mój kod był czysty i uporządkowany. To znaczy, powiedziałem mu, że posiadanie kodu Cleaner to dobry pomysł w ogóle, ale oczywiście, że powodem nie było dobre uzasadnienie, bo nawet nie przeszkadza, aby spędzać czas w wykorzystaniem części dowolnej strony kodu C #.

Ponieważ wiele razy przenosisz klasę lub wyliczenie (lub typ ogólnie) z jednej przestrzeni nazw do innej, a to dodaje nowe instrukcje przy użyciu do kodu (albo ręcznie, wchodząc w okno kodu i samodzielnie pisząc instrukcję użycia, lub za pomocą edytora używającego kombinacji Alt+ Ctrl+ F10), a ponieważ te nowe instrukcje użycia zostaną dodane na końcu sekcji użycia , co sprawia, że ​​nie są sortowane alfabetycznie, a ponieważ kompilator nigdy nie narzeka na żaden z tych problemów, dlaczego powinniśmy to robić sekcja czysta i schludna? Jakie mamy powody?

Saeed Neamati
źródło
5
To pytanie zostało już zadane i udzielono odpowiedzi na Stack Overflow - stackoverflow.com/questions/4163320/unused-using-statements (i dwa powiązane pytania na pasku bocznym) - zasadniczo nie ma powodu, aby martwić się o nieużywane zastosowania
ChrisF
Świetne referencje @ChrisF, myślę, że dostałem tam swoją odpowiedź. Może powinieneś przyłączyć się do tego pytania lub zrobić coś podobnego. :)
Saeed Neamati,
Sprawdź to również: stackoverflow.com/a/136646/333306

Odpowiedzi:

22

Nie ma różnicy w wydajności, bez względu na to, ile usingmasz dyrektyw.

Ale myślę, że sensowne jest utrzymanie ich w czystości z dwóch powodów:

  1. Jeśli spojrzysz na usings, możesz zobaczyć, jakie zależności ma plik. Pomoże ci to dowiedzieć się, jakie są typy plików. Jeśli to zrobisz, posiadanie usings w określonej kolejności pomoże ci to zobaczyć szybciej.
  2. Jeśli masz za dużo usings, może to oznaczać, że masz słabą separację problemów i że typy w pliku powodują zbyt wiele.

Oba nie są bardzo ważne, więc nie powinieneś się tym zbytnio przejmować. Ale osobiście uważam, że warto zachować usingczystość.

svick
źródło
8

Moje główne powody, dla których warto posprzątać wśród instrukcji użycia, to:

  • Im więcej instrukcji używania, tym większa możliwość konfliktów nazw, co oznaczałoby, że musisz uwzględnić części przestrzeni nazw w kodzie, aby uniknąć niejednoznaczności.
  • IntelliSense jest filtrowany na podstawie wszystkich zestawów w instrukcjach użytkowania. Dlatego jeśli usuniesz to z niepotrzebnych stwierdzeń, pomożesz sobie, pomagając w dokładności IntelliSense.

Ponadto zgadzam się z innymi odpowiedziami, ponieważ zwiększa to czytelność i ułatwia uzyskanie wyobrażenia o tym, co robią typy w klasie.

Fredrik Ljung
źródło
Nie rozumiem, dlaczego nie jest to wyżej głosowane. Konflikty przestrzeni nazw są uzasadnionym problemem.
RubberDuck
7

„Doskonałość osiąga się nie wtedy, gdy nie ma już nic do dodania, ale gdy nie ma już nic do zabrania” - Antoine de Saint-Exupery

Ilekroć możesz usunąć coś, co nie jest konieczne i nie dodaje zrozumienia, zrób to (czytelność jest warta dodatkowego kodu).

jmoreno
źródło
Świetny aforyzm. Podobał mi się ten pomysł. +1;)
Saeed Neamati,
4

To po prostu usuwa szum z sygnału. Mniej szumów oznacza, że ​​łatwiej jest odbierać sygnał, tzn. Zrozumieć intencję kodu.

Generator hałasu jest jednak dość niewielki.

Ian
źródło
2
  • Poprawia czytelność twojego kodu.
  • Zwykle nie ma sensu stosowanie się do tych wytycznych, jeśli masz tylko kilka instrukcji użycia

  • Bardziej sensowne jest rozdzielenie za pomocą instrukcji na sekcje.

Na przykład:

    using System.Web;

    using MyPlatform.FooX;        
    using MyPlatform.FooY;

    using MyFramework.Helpers;        
    using MyFramework.Extentions;

Jeśli spojrzę na klasę, to od razu widzę, że dana klasa używa asemblera System.Web, a także naszej platformy i frameworka. Daje mi to ogólne pojęcie o jego zależnościach i złożoności.

Następnie możesz pójść o krok dalej i uporządkować instrukcje, ale myślę, że dzięki temu korzystanie z instrukcji jest mniej czytelne, więc nie poleciłbym tego.

using MyFramework.Extentions;
using MyFramework.Helpers;

using System.Web;

using MyPlatform.FooX;        
using MyPlatform.FooY;
CodeART
źródło