Czy jestem niemoralny, używając nazwy zmiennej, która różni się od jej typu tylko wielkością liter?

95

Na przykład weź ten fragment kodu:

var person = new Person();

lub dla Ciebie Pythonistas:

person = Person()

Ciągle słyszę, jak źle to jest, ale nie widziałem jeszcze przykładu niemoralności tych dwóch wierszy kodu. Dla mnie osoba jest Osobą i próba nadania jej innego imienia jest stratą czasu. Przypuszczam, że w dniach poprzedzających podświetlanie składni byłaby to wielka sprawa. Ale obecnie dość łatwo odróżnić nazwę typu od nazwy zmiennej. Heck, nawet łatwo zauważyć różnicę w SO.

A może jest coś, czego mi brakuje? Jeśli tak, byłoby pomocne, gdybyś mógł podać przykład kodu, który powoduje problemy.

Jason Baker
źródło
Zawsze się nad tym zastanawiałem. Fajne pytanie!
William Brendel
18
Nazywanie osoby Person jest po prostu okrutne. Co jest nie tak z „bobem”?
Sam Meldrum,
17
Nie zapominajmy, że przed var istniało piękno zen: Person person = new Person ();
Jamie Ide
1
@Jamie, czy wywołujesz statyczne wpisywanie w stylu zen?
orokusaki
Chciałbym jeszcze bardziej zagłębić się w tę kwestię: czy jest to bezspornie błędne postępowanie Person Person=new Person();w tej sprawie? Jak stwierdzono w The Question, żyjemy w czasach tak niesamowitego podkreślania składni i rozpoznawania kontekstu, że mój kompilator nigdy nie narzekał, że robię to. Po prostu uwielbiam moje zmienne CamelCased - dlaczego więc nie miałbym (w sytuacjach, w których Person Personwystępuje ogólna i jedyna instancja klasy i nie ma konfliktu ani nie jest możliwy)?
Robert Synoradzki

Odpowiedzi:

94

Jakie jest rozumowanie tych, którzy mówią ci, że to jest złe? Robię to cały czas. Jest to najprostszy, wyrazisty sposób nazwania pojedynczej zmiennej typu. Jeśli potrzebujesz dwóch Personobiektów, możesz poprzedzić personznaczącymi przymiotnikami, takimi jak

fastPerson
slowPerson

inaczej po prostu

person

nie przeszkadza mi.

Andrew Hare
źródło
8
- Jakie jest rozumowanie tych, którzy mówią ci, że to jest złe? - Nie wiem. Dlatego zacząłem ten temat. :-)
Jason Baker
Najwyraźniej nigdy nie musiałeś wchodzić w kod kogoś innego. Wiem, że kiedy poproszono mnie o zbadanie jakiegoś nowo odkrytego błędu w kilkuletnim kodzie przez programistę, który już dawno odszedł z firmy - wszystko, co może mi przeszkodzić, to czas nie naprawiania problemu. Jeśli jedna z tych przeszkód próbuje dowiedzieć się, co to jest instancja, a jaka klasa, tylko dlatego, że programista nie chciał powiedzieć „var currentPerson = New Person ();” to jest bezużyteczny, zmarnowany czas. ... a kiedy Twoi klienci czekają na rozwiązanie, liczy się czas.
David,
3
@David - Złapałeś mnie! Wiedziałem, że kodowanie w próżni prędzej czy później podniosłoby brzydką głowę :) Ale poważnie - trudno mi uwierzyć, że nie możesz rozróżnić typów i ich wystąpień w oparciu o tę konwencję nazewnictwa.
Andrew Hare
2
@David - to powinno być problemem dla narzędzia do analizy kodu. Dlatego też istnieje konwencja, że ​​w Pythonie typy zaczynają się od dużej litery.
ilya n.
69

Często używam tego wzorca w sygnaturach metod. Jeśli nie mogę podać alternatywnej nazwy opisowej, a następnie IMHO, nie ma w tym nic złego.

Źle byłoby, gdybyś miał dwa typy: osoba i osoba, to bardzo, bardzo źle.

JoshBerke
źródło
1
„Źle byłoby, gdybyś miał dwa typy: osoba i osoba, to bardzo, bardzo źle”. - To ma dla mnie sens.
Jason Baker
1
Jeśli budowanie API VB nie byłoby w stanie obsłużyć kodu, ponieważ nie ma w nim rozróżniania wielkości liter.
JoshBerke
1
Hej, w przypadku API przejmujesz się publicznymi nazwami metod lub właściwościami, a nie nazwami zmiennych, ponieważ te ostatnie nie zostaną ujawnione kodowi klienta. Jeśli chodzi o pytanie Jasona, ja również używam tego nazewnictwa przez cały czas. Absolutnie nic w tym złego.
Frederick The Fool
1
Dokładnie mój punkt Frederick dlaczego posiadanie dwóch rodzajów, które różnią się jedynie podstawową sprawę jest to zły pomysł ;-)
JoshBerke
1
Nawet jeśli nie jest źle, utrudnia to odczytanie kodu. Czytelność też ma znaczenie.
J3r3myK
45

Używam go cały czas do tymczasowych odniesień do obiektów. Uniknąłbym tego jak plagi dla prymitywnych typów danych.

Person person = new Person(); // okay

int Int = 42; // pure evil
Bill the Lizard
źródło
Gdyby naprawdę nie było znaczenia semantycznego, które mógłbym podać prymitywowi, użyłbym i lub s, poza indeksami pętli nie przychodzi mi do głowy żaden inny taki scenariusz.
AnthonyWJones
1
Odradzałbym używanie i, zwłaszcza jeśli piszesz kod z pętlą. i jest prawie powszechnie uważany za nazwę zmiennej pętli.
Jason Baker
3
Zgoda. Jednoliterowa nazwa zmiennej krzyczy „Jestem tymczasowy”. Indeksy pętli powinny być i, j, k, inne powinny być a, b, c, x, y, z lub jakąkolwiek inną literą, której nie można pomylić z czymś innym, na przykład l i o.
Bill the Lizard
Brawo! 42 to po prostu za dużo. :)
Vishal Seth
18

Jeśli ktoś mówi, że to złe, zapytaj go, czy tak jest lepiej:

var abc = new Person();
Chris
źródło
2
@Chris: dokładnie! Albo jeszcze lepiej: var temp = new Person();(Zastrzeżenie: wiem, że naprawdę są miejsca do jednorazowego użycia zmiennych tymczasowych, ale równie często, jak nie, gdy widzę to w czyimś kodzie, autor po prostu nigdy nie wrócił do nadania var odpowiedniej nazwy i może jako „abc”)
Dinah
15

Jeśli w kontekście osoba jest osobą ogólną, to „osoba” to naprawdę dobre imię. Oczywiście, jeśli osoba ma określoną rolę w kodzie, lepiej jest nazwać ją za pomocą tej roli.

PEZ
źródło
9

Przypuszczam, że zostanę zlekceważony za to, ale ...

Właśnie przeszliśmy przez stulecie, będąc świadkami epickich morderstw i chciwości, my, programiści, jesteśmy naprawdę błogosławieni, jeśli najbardziej niemoralną rzeczą, jaką możemy zrobić, jest nazwanie zmiennej.

Mike Dunlavey
źródło
6
Ewentualnie, jeśli decyzje moralne, które możemy podjąć, są tak nieistotne, jesteśmy przeklęci. Nie jestem pewien, czy chcę, aby moja pochwała pogrzebowa koncentrowała się na moim stylu kodowania. Chciałbym przynajmniej przelotnie wspomnieć, że jestem częścią rodziny.
David Thornley
1
@David: Znowu dobrze. Kiedy mój pierwszy wnuk jest w drodze, wydaje mi się, że to banalne, ale obchodzi mnie, jaki świat nam przekazujemy.
Mike Dunlavey
8

Nie wydaje mi się, żeby to było „złe”, ale oczywiście jeśli możesz to określić, aby nadać mu więcej kontekstu, np. Jakiego rodzaju jest to osoba (masz do czynienia tylko z jedną z przypuszczalnie wielu możliwych osób), wtedy ktoś inny ją wybierze się może lepiej zrozumieć.

Tim Almond
źródło
6

Jason - Nie jestem pewien, kto ci powiedział, że to jest złe. Wielu autorów używa tego jako standardowego sposobu wyrażania Instancji (małe litery) klasy (pisane wielką literą).

Używam tego dość często, ponieważ stwierdzam, że zmienna pisana małymi literami faktycznie przekazuje mi nie tylko informację, że jest to instancja, ale także nazwę klasy.

O ile ktoś nie ma solidnego argumentu przeciwnego, z pewnością będę to kontynuować.

Mark Brittingham
źródło
6

Powodem, dla którego jest to uważane za złe, jest to, że jeśli w przyszłości potrzebujesz mieć 2 osoby, możesz skończyć z kodem, który wygląda jak.

Osoba osoba = nowa Osoba ();

Osoba osoba2 = nowa Osoba ();

Byłoby to wtedy z pogranicza „Zła”. Jednak w takim przypadku powinieneś dokonać refaktoryzacji swojej oryginalnej osoby, aby odróżnić je od siebie.

Na przykład nazwa zmiennej „osoba” jest doskonale opisową nazwą obiektu „Osoba”. Dlatego nie ma w tym nic złego.

Robin Day
źródło
3

Podaję nazwę, co to jest: jeśli zmienna reprezentuje osobę z 2 psami, nazwij ją personWith2Dogs. Jeśli zmienna ma krótki zasięg (jak zmienna pętli), osoba jest w porządku.

Mitch Wheat
źródło
3

Używam tego dużo w moim kodzie i nie sądzę, że jest w nim coś złego. To powiedziawszy, (prawdopodobnie) nie użyłbym go w metodzie dłużej niż, powiedzmy, jeden ekran i jeśli istnieje wiele wystąpień klasy Person. Zdecydowanie nie nazywaj ich osoba1, osoba2, osoba3 ... zamiast tego użyj czegoś bardziej opisowego, na przykład person_to_del, person_to_ban, person_to_update itp.

kmelvn
źródło
3

Nie niemoralne, ale globalne wyszukiwanie znajdzie oba Personi personjeśli nie włączysz rozróżniania wielkości liter. Wolę prefiks, aby ułatwić globalne wyszukiwanie / zamianę, ale absolutnie NIE węgierski ani coś długiego / skomplikowanego. Więc używam ...

Persondla klasy / typu aPersondla zmiennej lokalnej thePersondla parametru metody myPersondla zmiennej instancji ourPersondla zmiennej klasy

W rzadkich przypadkach mogę użyć pw lokalnym kontekście, w którym mam DUŻO odniesień, ale zwykle dotyczy to tylko indeksów pętli i tym podobnych.

Rob Williams
źródło
3

To zależy.

Jeśli masz ścisły styl wielkich liter, więc zmienne zaczynają się małymi literami (i używaj under_scores lub camelCase do łamania słów), a klasy zaczynają się od wielkich liter, wtedy jest oczywiste, że osoba jest zmienną, a osoba jest klasą, a kiedy ktoś to rozumie , nie wydają się znajdować w nakładających się przestrzeniach nazw. (Podobnie, ludzie prawie nigdy nie są myleni między czasownikiem lub rzeczownikiem „polski” a przymiotnikiem „polski”.)

Jeśli nie masz takiego stylu, masz dwie nazwy, które można łatwo pomylić i różnią się tylko wielkością liter. To źle.

David Thornley
źródło
Cześć ponownie David. Nie pamiętam, czy to ty zredagowałeś jeden z moich postów, bo napisałem „polskę”, czy też „polerowanie”, kiedy chciałem coś pocierać, aż zacznie świecić? No cóż, nadal nie jestem pewien, który jest właściwy :-)
Mike Dunlavey
Chyba nie zrobiłem takiej edycji, więc prawdopodobnie był to ktoś inny. A tak przy okazji, to „polski”.
David Thornley
2

Jakich dokładnie argumentów używają ci ludzie?

Jeśli nie pozwalają na użycie osoby jako nazwy zmiennej, możesz rozważyć dodanie przedrostka „a”.

aPerson = Person()
Gerrie Schenck
źródło
2
Moim zdaniem byłoby gorzej. Jest trudniejszy do odczytania i nie dostarcza żadnych dodatkowych informacji.
Joachim Sauer
Tak, ale przynajmniej nazwa różni się od nazwy klasy, czego oczywiście chcą.
Gerrie Schenck
Byłoby to zgodne z literami prawa, ale na pewno nie z duchem.
Joachim Sauer
1
+1, używam thePerson do parametrów i myPerson do lokalnych, którymi zarządzam.
Amy B
2

Myślę, że to, co robisz, jest w porządku. Myślę, że ogólnie ważne jest, aby uzgodnić standardy kodowania.

Na przykład używam lowerCamelCase dla instancji, zmiennych i UpperCamelCase dla klas itp

Standardy kodowania powinny usunąć ten problem.

Kiedy patrzę na odnoszące sukcesy programy open source, często mają one standardy kodowania

http://drupal.org/coding-standards

http://help.joomla.org/content/view/826/125/

http://wiki.rubyonrails.org/rails/pages/CodingStandards

http://lxr.linux.no/linux/Documentation/CodingStyle

Uzgodnienie standardów kodowania powinno być ostatnią bitwą, jaką masz w tej sprawie.

W rzeczywistości spójrz na wpis wikipedii (z http://en.wikipedia.org/wiki/CamelCase )

Styl programowania i kodowania

Czasami zalecane jest używanie wielkich liter w celu wskazania granic słów w wytycznych dotyczących stylu kodowania przy pisaniu kodu źródłowego (np. Język programowania Mesa i język programowania Java). Zalecenia zawarte w niektórych z tych wytycznych są wspierane przez narzędzia do analizy statycznej, które sprawdzają zgodność kodu źródłowego.

Te zalecenia często rozróżniają między UpperCamelCase i lowerCamelCase, zwykle określając, która odmiana powinna być używana dla określonych rodzajów jednostek: zmiennych, pól rekordów, metod, procedur, typów itp.

Jeden szeroko stosowany styl kodowania w Javie nakazuje, aby UpperCamelCase był używany do klas, a lowerCamelCase do instancji i metod. [19] Rozpoznając to użycie, niektóre IDE, takie jak Eclipse, implementują skróty oparte na CamelCase. Na przykład w funkcji pomocy treści Eclipse wpisanie tylko wielkich liter słowa CamelCase zasugeruje dowolną pasującą nazwę klasy lub metody (na przykład wpisanie „NPE” i aktywacja pomocy treści może zasugerować „NullPointerException”).

Oryginalna notacja węgierska dotycząca programowania określa, że ​​mały skrót oznaczający „typ użycia” (nie typ danych) powinien poprzedzać wszystkie nazwy zmiennych, a pozostałą część nazwy należy wpisać w UpperCamelCase; jako taka jest formą lowerCamelCase. CamelCase to oficjalna konwencja nazw plików w Javie i dla komputerów osobistych Amiga.

Microsoft .NET zaleca lowerCamelCase dla parametrów i niepublicznych pól oraz UpperCamelCase (aka „Pascal Style”) dla innych typów identyfikatorów. [20]

Python zaleca UpperCamelCase dla nazw klas. [21]

Rejestr NIEM wymaga, aby elementy danych XML używały UpperCamelCase, a atrybuty XML korzystały z lowerCamelCase.

Nie ma jednej konwencji umieszczania skrótów wielkich liter (głównie akronimów i inicjałów) w nazwach CamelCase. Podejścia obejmują pozostawienie całego skrótu wielkimi literami (np. „UseHTTPConnection”) i pozostawienie tylko pierwszej litery wielkiej (np. „UseHttpConnection”).

Obudowa wielbłąda nie jest bynajmniej uniwersalna w komputerach. Użytkownicy kilku nowoczesnych języków programowania, zwłaszcza tych z rodzin Lisp i Forth, prawie zawsze używają łączników. Wśród powodów, które czasami podaje się, jest to, że nie wymaga to zmiany na większości klawiatur, że słowa są bardziej czytelne, gdy są rozdzielone, oraz że wielbłądowe litery mogą po prostu nie być niezawodnie zachowane w językach bez rozróżniania wielkości liter lub ze składaniem wielkości liter (takich jak Common Lisp, który, choć technicznie jest językiem uwzględniającym wielkość liter, domyślnie kanonizuje (składa) identyfikatory do wielkich liter).

Stewart Robinson
źródło
2

Można mocniej argumentować, że tego rodzaju nazwy metod są nie tylko nieszkodliwe, ale mogą być wskaźnikiem dobrej jakości kodu.

  • Wskaźnik dobrej szczegółowości kodu: jeśli Twoje metody są krótkie, przeznaczone do jednego celu i opisowo nazwane, nie potrzebujesz wielu informacji w nazwach zmiennych. Jeśli masz długie metody, które wykonują wiele rzeczy i musisz śledzić wiele kontekstów i stanów, nazwy zmiennych muszą być bardziej opisowe.

  • Wskaźnik spychania obliczeń ogólnego przeznaczenia do metod ogólnego przeznaczenia: jeśli wykonujesz pośrednią manipulację strukturami danych w metodzie biznesowej, na przykład tablica użytkowników musi zostać zdeduplikowana, będziesz musiał mieć zmienne w zakresie o nazwach takich jak users[]i deduplicatedUsers[]. Jeśli przeniesiesz deduplikację do metody narzędziowej, możesz wywołać tę metodę Utils.dedup(array)i możesz wywołać zdeduplikowaną tablicę deduplicatedArraylub po prostu result.

  • Dekompilatory Java często używają takiego schematu do nazywania zmiennych lokalnych (zmienne instancji i klasy są zwykle dostępne w kodzie bajtowym, ale zmienne lokalne nie są), a wyniki są bardziej czytelne niż można by się spodziewać, w rzeczywistości często bardziej czytelne niż Pierwotnym źródłem.

  • Zobacz zasadę Larry'ego Walla „Lokalna niejednoznaczność jest OK” - http://www.wall.org/~larry/natural.html .

user8599
źródło
2

Powiedziałbym, że kiedy tworzysz obiekt, prawdopodobnie masz na myśli jakieś szczególne zastosowanie. Sam typ bardzo rzadko odzwierciedla to użycie.

Więc jeśli chcesz utworzyć nowy kontakt w swojej aplikacji książki adresowej, możesz chcieć wywołać zmienną newContact.

A jeśli testujesz jednostkowo swój kod, aby sprawdzić zachowanie Personobiektów bez ustawionych nazw, możesz chcieć je wywołać unnamedPersonlub coś podobnego.

Nazywanie go po prostu oznacza personrezygnację z dużej szansy na samodokumentację kodu.

Joachim Sauer
źródło
Nazwij to anonimowym! :)) var anonymous = new Person (); Lub jeszcze lepiej: var you_know_who = new Person (); :))
Vadim Ferderer
@Vadim Ferderer: var he_who_must_not_be_named = new Person();? :-)
Platinum Azure
2

Tylko jeśli programujesz w VB6. W takim przypadku to, co robisz, jest nielegalne, ale nie niemoralne.

brianegge
źródło
1

Ja też to robię i nie rozumiem też, dlaczego miałoby to być „niemoralne”. Chociaż rozumiem, że czasami może to być mylące, ale dzisiaj mamy IDE z inteligencją i podświetlaniem składni, które zapewnią, że (jeśli popełnisz błąd i odniesiesz się do zmiennej zamiast do klasy i odwrotnie) dość szybko zobaczysz swój błąd. Mamy też kompilator. :)

Frederik Gheysels
źródło
1

Nie widzę też żadnego problemu w tej praktyce. Dopóki istnieje tylko jedna zmienna tej klasy, jest łatwa do napisania i łatwa do odczytania. Imo, to działa nawet w podstawowym edytorze tekstu. Osobiście nie przypominam sobie, żeby ktokolwiek nazwał to złym lub nawet niemoralnym. Po prostu kontynuuj to :)

mafu
źródło
1

Myślę, że „reguła”, o której możesz pomyśleć, jest przeznaczona bardziej dla typów pierwotnych i klas, w których nazwa klasy jest złą nazwą zmiennej.

Na przykład, gdybyś miał do czynienia z kalkulacją ceny konkretnego towaru w sklepie internetowym, poniższy kod nie byłby dobrą formą:

Decimal _decimal = item.BaseCost + item.Tax;

Zamiast tego zalecana byłaby bardziej opisowa nazwa, na przykład „_total” lub „_cost”.

Jay S.
źródło
1

Jedyny problem z tego rodzaju rzeczami, jaki znalazłem, to to, że chcesz mieć taką samą nazwę dla członka prywatnego, a także własności publicznej.

Jeśli różnią się one tylko wielkością liter, będzie działać dobrze w językach z rozróżnianiem wielkości liter, takich jak C #, ale nie w VB.NET.

Więc na przykład w VB napisałbym

Private _name As String

ale

Public Property Name() As String
    Get
        Return _name
    End Get
    Set(ByVal Value As String)
        _name = Value
    End Set
End Property

Zrobiłbym to samo w C #, aby tłumaczenie z jednego do drugiego było bezbolesne. Dzięki temu jest trochę mniej podatny na błędy, ponieważ bardzo łatwo jest źle odczytać, a nawet błędnie wpisać słowa, które różnią się tylko wielkością liter.

ChrisA
źródło
Jedyne, co mi się nie podoba w tym podejściu, to fakt, że zmienne poprzedzone pojedynczym podkreśleniem są zwykle kojarzone z prywatnymi członkami klasy. Ale przypuszczam, że ogólne podejście jest przyzwoite.
Jason Baker
Tak, to właśnie tutaj ilustruję. Zdefiniowanie zmiennej lokalnej, takiej jak „Dim person as New Person”, byłoby w porządku. Bardzo (bardzo) czasami w przypadku kompilatora VB występuje niejednoznaczność i normalne uspokajające automatyczne wpisywanie wielkich liter nie występuje. To dobry wizualny sygnał, że nie wszystko jest w porządku.
ChrisA
1

Nie niemoralne, ale jeśli najlepszą nazwą dla zmiennej jest nazwa typu, coś jest nie tak lub po prostu udowadniasz koncepcję lub coś w tym rodzaju. Dla mnie nazwa zmiennej musi odnosić się do znaczenia w kontekście biznesowym, a nie do języka programowania. Zrozumienie kodu będzie trudniejsze.

João Cintra
źródło
1

Często używam Person person = new Person()siebie. Powszechnie używane w Javie / C #.

Chociaż wczoraj zastanawiałem się, dlaczego

private enum DataType {NEW, OLD}

nie działa w C # ...

Zwłaszcza widząc, jak można użyć String, string, Double, double, ... do woli w języku C #.

Carra
źródło
enum obsługuje tylko bajty, sbyte, short, ushort, int, uint, long, ulong. tj. nieułamkowe typy wartości liczbowych
Kev
1
Person person = new Person()

jest w porządku w mojej książce.

Kiedy to staje się okropne, jest:

string Person;
string person;

Bardzo łatwo wymieszać 2.

Johnno Nolan
źródło
1

To, co zostało mi powiedziane, poza tym, że nie spełnia naszych standardów kodowania, to unikanie dodawania nieporozumień, gdy ktoś inny czyta mój kod. Osobiście nie widzę z tym problemu, o ile znaczenie jest jasne.

Jeśli chodzi o typy CLR (int, string itp.), Możesz użyć String lub string (itp.) Do zadeklarowania typu, więc unikałbym używania czegoś takiego

int Int = 0;
string String = "hi there";
Muad'Dib
źródło
1

Dokonywanie wielkich liter jedyną różnicą jest niebezpieczne ... rób to dalej dla dużego projektu, a gwarantuję , że napotkasz dziwne błędy, których nie możesz zlokalizować.

fastPerson / slowPerson, jak wyżej, są w porządku ... są opisowe i różnią się od nazwy typu zmiennej ... ale daj spokój, man, wywołanie int "Int" byłoby po prostu leniwe.

alexwood
źródło
1

Powiedziałbym, że nigdy nie jest niemoralne - tak naprawdę to tylko nazwa zmiennej linii bazowej. Jeśli nie można wymyślić lepszej nazwy, nazywając go po jego typ jest domyślnie dobry (Dla typów złożonych. Tylko - dla typów wbudowanych w jego zło ) i dużo czasu tak naprawdę nie jest lepsza nazwa przyczyna don” nie wiem nic więcej o zmiennej. Podobnie jak w przypadku tej metody

void SaveToDatabase(Person person) {...}

Jedyną rzeczą, którą możesz rozsądnie nazwać osobę, jest person_to_savecoś takiego, co wydaje się zbędne.

Jednak w wielu przypadkach można poprawić czytelność kodu, zastępując osobę bardziej opisową nazwą. Na przykład jest to mniej opisowe

void AddToAccount(Account account, Person person)  {...}

od tego

void AddToAccount(Account account, Person dependent)  {...}

Jednak proszę - bardzo proszę, nie umieszczaj „a” ani „t” przed nazwą typu. IE aPerson dla „osoby” lub tPerson dla „osoby”. Jest to zbyt skomplikowane i nie dodaje wiele, jeśli w ogóle, wartości. Dodatkowo zaczynasz zanieczyszczać swój zasięg kilkoma zmiennymi zaczynającymi się od a lub t, co może zminimalizować wartość funkcji intelli-sense.

Joshua
źródło
Zgadzam się z ostatnim akapitem. Nie widzę powodu, aby dodawać obce postacie tylko po to, aby uniknąć drobnego problemu ze stylem.
Jason Baker
0

Nie powiedziałbym, że to straszne. Zwykle poprzedzam nazwę zmiennej „a” w tego rodzaju rzeczach, aby pokazać, że jest to pojedyncza instancja tego typu, więc zrobiłbym

Person aPerson = new Person();

Myślę, że to sprawia, że ​​kod jest czytany bardziej naturalnie.

Rob K
źródło
0

Absolutnie nie ma w tym nic złego, z zastrzeżeniem zastrzeżeń wskazanych przez innych (podsumowanie tutaj dla wygody): nie robienie tego z typami prymitywnymi, refaktoryzacja oryginalnej instancji, jeśli później zostanie dodana inna instancja, nie używanie wielkości znaków do rozróżniania nazw klas itp.

Moja praktyczna zasada? Instrukcje w kodzie powinny wyglądać jak proste angielskie zdania.

Osoba osoba = nowa Osoba ();

Pracownik pracownik = person.getRole (PRACOWNIK);

Rodzic rodzic = person.getRole (PARENT);

person.getFullName ();

pracownik.getSalary ();

parent.getChildren ();

parent.getFullName (); // zakładanie wzorca dekoratora w grze

if (person.hasRole (PRACOWNIK)) {

  ...

}

I tak dalej.

Jeśli zakres zmiennej jest ograniczony (na przykład metoda hermetyzacji to 10-15 wierszy), mógłbym nawet użyć „p” zamiast „osoba”. Krótsze nazwy zmiennych są mniej rozpraszające, gdy próbujesz utrzymać kontekst w głowie. Unikaj nieuzasadnionych przedrostków, takich jak „a” lub (dreszcz) notacja węgierska i jej odgałęzienia. (Pamiętaj, nie mam nic przeciwko takim prefiksom, gdy są używane w odpowiednim kontekście - kod API C ++ / COM / ATL / Win32 itp., Gdzie pomaga to zachować proste przypisania / typowanie).

Moje dwa (!) Bity :-)

alan-p
źródło