Właśnie zacząłem używać ReSharpera (dla C #) i podoba mi się jego wyszukiwarka zapachów, pokazuje mi pewne rzeczy na temat pisania, które chciałem naprawić dawno temu (głównie zmienne konwencje nazewnictwa).
Zmusiło mnie to do ponownego rozważenia niektórych konwencji nazewnictwa dla metod i zmiennych instancji. ReSharper sugeruje, że zmienna instancji ma być małą literą wielbłąda i zaczyna się od podkreślenia. Przez jakiś czas chciałem, aby wszystkie moje zmienne lokalne były małymi literami wielbłąda, ale czy konieczne jest podkreślenie? Czy uważasz to za wygodne? Nie podoba mi się ta konwencja, ale jeszcze jej nie wypróbowałem, co o tym sądzisz?
Drugą rzeczą, która skłoniła mnie do ponownej oceny, są moje konwencje nazewnictwa dla programów obsługi zdarzeń GUI. Zwykle używam standardu VS ControlName_Action, a moje formanty zwykle używają węgierskiej notacji (jako sufiksu, aby pomóc w wyjaśnieniu w kodzie tego, co jest widoczne dla użytkownika, a co nie, gdy mamy do czynienia ze zmienną o podobnej nazwie), więc kończę na OK_btn_Click ( ), co o tym sądzisz? Czy powinienem poddać się konwencji ReSharper, czy istnieją inne równie ważne opcje?
Z szacunkiem do
Jedną z rzeczy, które bardzo lubię w używaniu podkreślenia, jest to, że radykalnie ogranicza użycie „tego”.
Rozważać:
bez podkreślenia musiałbyś napisać:
co potencjalnie wprowadza subtelny błąd:
Ponadto uzupełnianie kodu jest czystsze, ponieważ po prostu wiążąc podkreślenie, otrzymujesz listę tylko prywatnych pól, podczas gdy z „tym” otrzymujesz listę wszystkiego.
Z szacunkiem do
Wytyczne dotyczące projektowania ram: konwencje, adresy i wzorce bibliotek wielokrotnego użytku .NET mówią:
Pozostawiając mało miejsca na dwuznaczność:)
źródło
this.size
jest to o wiele wyraźniejsze niż_size
. Użycie podkreślonej nazwy nie zapobiega subtelnemu błędowi, nadal możesz przypisać sobie rozmiar, ale mam nadzieję, że twój kompilator ci to powie.this.size
i_size
jest spójność. Oznaczathis.size
to, że jest opcjonalny. Na przykład, jeśli wywoływane było inne prywatne polename
, nie ma potrzeby używaniathis.name
w kodzie, równie dobrze mógłbym używaćname
bez żadnych kolizji. Ponieważthis
może być używany czasami, a nie innym razem, dlaczego używaniethis
jest gorsze. Z drugiej strony nie ma dwuznaczności z_
...Spójność jest naprawdę kluczem. To i jasność, tzn. Nie bądź tajemniczy ani nie próbuj oszczędzać pisania, skracając wszystko. Intellisense to oszczędzanie pisania, a nie tajemnicze (ale krótkie!) Nazwy.
źródło
order.Size()
(w przeciwieństwie doorder.getSize()
), ale ponieważ inne biblioteki używają programów pobierających i ustawiających mój kod nie będzie spójny.W języku C # rozpoczynanie nazwy chronionej lub publicznej znakiem podkreślenia jest niezgodne ze specyfikacją języka wspólnego. Jest to poprawne tylko w przypadku członków prywatnych.
Z MSDN:
Zobacz: http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx
Tutaj możesz przeczytać ostrzeżenie o podkreśleniu:
Zobacz: http://msdn.microsoft.com/en-us/library/81ed9a62.aspx
Członkowie chronieni stanowią problem, ponieważ możesz dziedziczyć po klasach napisanych w innym języku.
Ale może nie jest to problem w twoim przypadku, jeśli nie potrzebujesz kodu zgodnego z CLS.
źródło
Lubię podkreślenia. Na pierwszy rzut oka wiesz, że zmienna jest członkiem klasy i jest prywatna.
Oczywiście IDE może ci powiedzieć, że kiedy najedziesz na nią myszką, ale „pierwszego spojrzenia” nie da się pokonać. Wiesz, co to jest zmienna lokalna i jaka jest zmienna składowa tylko na własne oczy. Nie wymaga przewijania ani kursorów myszy.
Możesz użyć słowa kluczowego „to”, ale _ jest krótszy, aby uzyskać lepszą możliwość skanowania w poziomie. Nazwy opisowe są zwykle pożądane, ale gdy coś jest ustaloną konwencją, lepiej mieć 1 znak. na przykład używając litery i jako indeksu podczas zapętlania tablicy. Ponieważ jest to ustalona konwencja, że i jest indeksem, zyskujesz możliwość skanowania bez wady zastanawiania się, co oznacza „i”.
źródło
Zgadzam się ogólnie z tym, co mówią inni, jednak jeśli chodzi o narzędzia i łańcuchy narzędzi, jestem leniwy i lubię łatwe życie. Uważam, że życie jest często łatwiej robić po prostu tak, jak sugerują. Powody są
Tak więc uważam, że jeśli znajdziesz właściwy powód do zmiany konfiguracji narzędzi, na które właśnie wydałeś fortunę, zrób to wszystko. Jeśli nie możesz uzasadnić zmiany, nie rób tego.
Należy pamiętać, że każda zmiana wiąże się z ciągłymi kosztami (rzeczywistymi i ukrytymi). Im mniej, tym niższy koszt. Na przykład - ten nowy facet, o którym wspomniałem - brak zmian oznacza, że może przeczytać jego instrukcję. Ponowna konfiguracja - musisz napisać aneks, przechowywać go wraz z innymi rzeczami, wycofać i poprosić go o przeczytanie po przeczytaniu instrukcji. Może nie stanowi to problemu dla sklepu dla 2 osób, ale co ze sklepem dla 100 osób?
źródło
Dwie reguły, o które pytasz, podkreślają na początku prywatnych nazw pól, a nazwy metod są ogólnie uważane za normę w kręgach programistycznych C #. Dostosowując się do tych konwencji, Twój kod będzie od razu bardziej zrozumiały dla innych programistów, ponieważ jest to sposób myślenia, w którym są przyzwyczajeni do działania.
Sufiks Label, RadioButton itp. Dla twoich kontroli jest również ogólnie uważany za normę. Często istnieje wiele formantów dla pojedynczej koncepcji (np. Label i TextBox), a ten przyrostek jest całkiem przydatny. Prawdziwa notacja węgierska została porzucona już dawno temu, ponieważ została przekupiona na coś, co nie wyraża jej pierwotnej intencji, czyli kontekst dotyczący zmiennej, a nie jej typu, wielkości itp.
źródło
W moim przypadku użycie camelcase i podkreślników pomaga w opisowych (czytaj: długich) nazwach zmiennych i uzupełnianiu kodu. Nie jestem pewien, jak działa autouzupełnianie programu Visual Studio, ale w QtCreator iw mniejszym stopniu w Eclipse można na przykład wpisać
i niech rozszerzy się do
Oszczędza trochę pisania na wypadek, gdybyś miał takie imiona
które mam tendencję do tworzenia w „opisowym trybie nazewnictwa”.
Za pomocą podkreślników mogę określić, która nazwa ma być automatycznie uzupełniana
lub
Mam nadzieję, że moje wyjaśnienie jest wystarczająco jasne :)
źródło