Używanie podkreślników w zmiennych i nazwach metod Javy [zamknięte]

Nawet w dzisiejszych czasach często widzę podkreślenia w zmiennych i metodach Javy, przykładem są zmienne członkowskie (jak "m_count" lub "_count"). O ile pamiętam, używanie podkreślników w tych przypadkach nazywa się bad style By Sun.

Powinny być używane tylko w stałych (jak w " Public final static int IS_OKAY = 1;"), ponieważ stałe powinny być całe wielkie litery, a nie wielbłądy. Tutaj podkreślenie powinno uczynić kod bardziej czytelnym.

Czy uważasz, że używanie podkreślników w Javie jest zły styl? Jeśli tak (lub nie), to dlaczego?

Author: SCdF, 2008-09-29

15 answers

Jeśli nie masz kodu używającego go teraz, sugeruję kontynuowanie tego. Jeśli twoja baza kodowa jej używa, kontynuuj to.

Największą zaletą stylu kodowania jest spójność . Jeśli nie masz z czym być spójnym, rekomendacje producenta języka są prawdopodobnie dobrym miejscem do rozpoczęcia.

 136
Author: Tanktalus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 19:17:43
sunDoesNotRecommendUnderscoresBecauseJavaVariableAndFunctionNamesTendToBeLongEnoughAsItIs();

as_others_have_said_consistency_is_the_important_thing_here_so_chose_whatever_you_think_is_more_readable();
 103
Author: Anders Sandvig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 19:41:39

Zasady:

  1. rób to, co robi edytowany kod
  2. Jeśli #1 nie ma zastosowania, użyj camelCase, bez podkreślników
 37
Author: davetron5000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 19:19:46

Nie sÄ ... dzÄ™, Ĺźe uĹźywanie _ lub M_ do wskazywania zmiennych czĹ 'onkowskich jest zĹ' E w Javie lub jakimkolwiek innym jÄ ™ zyku. Moim zdaniem poprawia to czytelność kodu, ponieważ pozwala spojrzeć na fragment i szybko zidentyfikować wszystkie zmienne członkowskie od miejscowych.

Można to również osiągnąć, zmuszając użytkowników do poprzedzania zmiennych instancji "tym", ale uważam to za slighly drakońskie. Pod wieloma względami narusza DRY, ponieważ jest zmienną instancji, dlaczego kwalifikuje ją dwa razy.

My własny styl to użycie m_ zamiast _. Powodem jest to, że istnieją również zmienne globalne i statyczne. Zaletą m_ / _ jest rozróżnienie zakresu zmiennych. Więc nie możesz ponownie użyć _ dla global lub static i zamiast tego wybieram odpowiednio g_ i s_.

 31
Author: JaredPar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 23:05:35

"zły styl" jest bardzo subiektywny. Jeśli pewne konwencje działają dla Ciebie i Twojego zespołu, myślę, że kwalifikuje się zły / dobry styl.

Aby odpowiedzieć na twoje pytanie: używam wiodącego podkreślenia do oznaczania prywatnych zmiennych. Mogę szybko przeskanować kod i dowiedzieć się, o co chodzi.

(prawie nigdy nie używam "tego", z wyjątkiem zapobiegania konfliktowi nazw.)

 7
Author: Christophe Herreman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 19:21:25

Użycie 'M_' lub '_' z przodu zmiennej ułatwia dostrzeganie zmiennych członkowskich w metodach w całym obiekcie.

Jako korzyść poboczna wpisanie 'M_' lub ' _ ' sprawi, że intelsense najpierw je wyskakuje;)

 6
Author: Nicholas Mancuso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 19:18:35
  • tak się składa, że lubię podkreślniki prowadzące dla (prywatnych) zmiennych instancji, wydaje się to łatwiejsze do odczytania i rozróżnienia.Oczywiście ta rzecz może sprawić, że będziesz miał problemy z przypadkami edge (np. zmiennymi instancji publicznych (wiem, że nie są powszechne) - tak czy inaczej je nazwiesz, prawdopodobnie łamiesz swoją konwencję nazewnictwa: {]}
  • private int _my_int; public int myInt;? _my_int? )

- o ile podoba mi się _style tego i myślę, że jest czytelny, to uważam, że jest to prawdopodobnie większy problem niż jest wart, ponieważ jest rzadki i prawdopodobnie nie aby dopasować cokolwiek innego w bazie kodowej, której używasz.

- automatyczne generowanie kodu (np. gettery generujące eclipse, settery) prawdopodobnie nie zrozumieją tego, więc będziesz musiał to naprawić ręcznie lub za pomocą eclipse na tyle, aby go rozpoznać.

Ostatecznie, idziesz przeciwko reszcie (java) prefs świata i prawdopodobnie mają pewne irytacje z tego powodu. I jak wspominały poprzednie plakaty, spójność kodu przebija wszystkie powyższe kwestie.

 5
Author: Steve B.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 20:25:41

Miło jest mieć coś do odróżnienia zmiennych prywatnych od publicznych, ale nie lubię '_' w ogólnym kodowaniu. Jeśli mogę pomóc w nowym kodzie, unikam ich użycia.

 4
Author: Fry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 20:06:32

Nie bez powodu używanie podkreślników było uważane za zły styl w dawnych czasach. Gdy kompilator runtime był czymś nieosiągalnym, a Monitory miały zadziwiającą Rozdzielczość 320x240 pikseli, często nie było łatwo odróżnić _name od __name.

 4
Author: Vladimir Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-10 21:19:14

To mieszanka stylów kodowania. Jedną ze szkół myślenia jest Przedmowa członków prywatnych z podkreśleniem, aby je odróżnić.

setBar( int bar)
{
   _bar = bar;
}

Zamiast

setBar( int bar)
{
   this.bar = bar;
}

Inne będą używać podkreślników, aby wskazać zmienną lokalną temp, która wyjdzie poza zakres na końcu wywołania metody. (Uważam, że to dość bezużyteczne - dobra metoda nie powinna być tak długa, a deklaracja jest tam! więc wiem, że wychodzi poza zakres) Edit: broń Boże programisty z tej szkoły i programisty ze szkoły memberData współpracuj! To byłoby piekło.

Czasami wygenerowany kod będzie poprzedzał zmienne z _ lub__. Chodzi o to, że żaden człowiek nigdy by tego nie zrobił, więc to jest bezpieczne.

 3
Author: Chris Cudmore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 19:20:35

Oto link do zaleceń Sun dla Javy. Nie musisz ich używać ani nawet tego, że ich kod biblioteczny podąża za nimi wszystkimi, ale jest to dobry początek, jeśli idziesz od zera. Narzędzia takie jak Eclipse mają wbudowane formatery i narzędzia do czyszczenia, które mogą pomóc ci dostosować się do tych konwencji (lub innych, które zdefiniujesz).

Dla mnie ' _ ' są zbyt trudne do wpisania:)

 3
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-05 17:26:25

Myślę, że każdy styl, który łamie własne wytyczne stylu języka (bez powodu) jest brzydki i dlatego "zły".

Bez wątpienia kod, który widziałeś, został napisany przez kogoś, kto pracował w języku, w którym podkreślenia były akceptowalne.

Niektórzy ludzie po prostu nie potrafią przystosować się do nowych stylów kodowania...

 2
Author: Joe Ratzer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 19:20:51

Powodem, dla którego ludzie to robią (z mojego doświadczenia) jest rozróżnianie zmiennych członkowskich i parametrów funkcji. W Javie możesz mieć taką klasę:

public class TestClass {
  int var1;

  public void func1(int var1) {
     System.out.println("Which one is it?: " + var1);
  }
}

Jeśli stworzyłeś zmienną członkowską _var1 lub m_var1, nie masz dwuznaczności w funkcji.

Więc to jest a styl, i nie nazwałbym tego złym.

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 19:34:11

Osobiście uważam, że język nie powinien tworzyć reguł dotyczących stylu kodowania. Jest to kwestia preferencji, użytkowania, wygody, pojęcia o czytelności.
Teraz projekt musi ustawić reguły kodowania, aby zapewnić spójność między listami. Możesz nie zgadzać się z tymi zasadami, ale powinieneś się ich trzymać, jeśli chcesz wnieść swój wkład (lub pracować w zespole).

Przynajmniej IDE takie jak Eclispe są agnostyczne, pozwalając na ustawianie reguł takich jak prefiksy lub sufiksy zmiennych, różne style umieszczenie klamry i zarządzanie przestrzenią itp. Możesz więc użyć go do sformatowania kodu zgodnie z wytycznymi .

Uwaga: jestem wśród tych, którzy zachowują swoje stare nawyki z C / C++, kodując Javę z przedrostkami M_ dla zmiennych członkowskich (i s_ dla statycznych), przedrostkami booleanów z początkową literą b, używając początkowych wielkich liter dla nazw funkcji i wyrównując nawiasy klamrowe... Horror dla fundamentalistów Javy! ;-)
Zabawne, to konwencje używane w mojej pracy... prawdopodobnie dlatego, że głównym początkowy programista pochodzi ze świata MFC! :- D

 1
Author: PhiLho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 19:54:12

To tylko twój własny styl, nic złego kodu stylu,i nic dobrego kodu stylu, tylko różnica nasz kod z innymi.

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-17 03:21:47