Sprzeczne style Java w zespole

12

Należę do zespołu programistów Java z terminem 6 tygodni. Wymaga to bardzo szybkiego napisania dużej części kodu. Jednak nasz zespół programistów ma różne style kodowania. Wszystko, od konwencji nazw po metody abstrakcji, różni się w naszym zespole. Czy ktoś wie o dokumentach, które określają „standardy” java?

Aby to wyjaśnić, zastanawiałem się, czy istnieje organizacja, która dyktuje na przykład odpowiednią konwencję nazewnictwa dla zmiennych i funkcji. Jest to nadrzędne, ponieważ przy tak krótkim terminie nie możemy sobie pozwolić na poświęcenie czasu na wzajemne zrozumienie kodu.

Daniel Gratzer
źródło

Odpowiedzi:

18

Istnieje taka organizacja: samo Sun / Oracle. Dokument nazywa się Konwencje kodu dla języka programowania Java i opisuje większość potrzebnych konwencji. Poproś wszystkich, aby zgodzili się go przeczytać i postępować zgodnie z jego zaleceniami.

Andres F.
źródło
3
Jest to dobrze znany standard, ale nie bój się odstępować od niego, jeśli zespół wyrazi na to zgodę. Ograniczenie do 80 znaków może być na przykład bolesne.
Martijn Verburg
1
@MartijnVerburg limit może skłonić refaktoryzację do metod i klas, aby uniknąć głębokiego wcięcia.
Jest to konwencja i może być rozsądnym rozwiązaniem awaryjnym, jeśli nie możesz znaleźć własnej umowy, ale jak sama nazwa wskazuje, nie dyktuje - to konwencja.
użytkownik nieznany
@userunknown Masz rację. Nie zgadzam się nawet ze wszystkimi konwencjami. Jest to jednak dobry kompromis, biorąc pod uwagę ramy czasowe PO.
Andres F.,
8

Naprawdę traktuję odpowiedź Andresa i skupiam się na aspekcie jednolitego formatowania kodu Java.

Jeśli korzystasz z Eclipse, możesz ustawić jego formater Java na automatyczne formatowanie do standardu Java. Formatyzator Eclipse ma również inne pomocne ustawienia, takie jak znaki w wierszu (tj. Ile znaków w wierszu przed podziałem do nowego wiersza) i wiele innych. Standaryzacja znaków w wierszu ułatwia różnicowanie kodu napisanego przez różnych programistów bez dużych różnic tylko z odstępów i podziałów wierszy.

Wreszcie w Eclipse, po ustawieniu wszystkich wymaganych ustawień, wyeksportuj swój formatyzator jako plik, który może zostać zaimportowany przez każdego członka zespołu. Więc jeśli używasz Eclipse, zdecydowanie polecam pełne zbadanie wszystkich opcji, które automatycznie sformatuje i edytuje kod, a następnie udostępniam ustawienia całemu zespołowi.

Zakładam, że inne główne środowiska IDE Java (IntelliJ i Netbeans) mają podobną funkcję do eksportowania ustawień formatu.

Sam Goldberg
źródło
2
+1 Dobra odpowiedź również! Możesz także zainstalować wtyczkę, taką jak Checkstyle, i ostrzegać ją o łamaniu konwencji.
Andres F.,
My też to robimy. Preferencje -> Java -> Edytor -> Opcje zapisywania i włącz format podczas zapisywania. Głównym powodem jest upewnienie się, że wiersze źródłowe, których dotyczy format, pojawią się tak szybko, jak to możliwe, aby historia kontroli wersji była jak najczystsza (ponownie diff).
Tak, ostatnio zacząłem to robić. Jedyne, czego nie jestem pewien, to to, że wybrałem opcję „usuń nieużywane zmienne prywatne” w opcji zapisu. Więc kiedy robię TDD, często zdarza mi się, że moje zmienne znikają, ponieważ kod został zapisany przed ich użyciem ... ale poza tym ta opcja była świetna.
Sam Goldberg,
6

Ten [inny styl kodowania] jest najważniejszy, ponieważ w tak krótkim terminie nie możemy sobie pozwolić na poświęcenie czasu na wzajemne zrozumienie kodu.

Tak właściwie. To nie jest najważniejsze.

Po 30 latach pracy jako konsultant przeczytałem dużo kodu od wielu klientów. Ważne jest, aby pamiętać, że każdy klient (i często w organizacji klienta) ma różne style.

Po przeczytaniu tak wielu stylów nauczyłem się tego.

Styl nie ma znaczenia

Skoncentruj się na pisaniu kodu, który zawsze działa, i pisaniu testów jednostkowych, które dowodzą, że zawsze działa.

Po wysłaniu działającego kodu możesz go ubrać, jeśli zabraknie błędów do naprawy i ulepszeń do zainstalowania.

S.Lott
źródło
może to nie ma znaczenia, ale jest też bardzo miło mieć i bardzo łatwe do zrobienia.
Kevin
1
Styl nie ma znaczenia, ale spójność ma znaczenie. Niespójny styl znacznie utrudnia konserwację oprogramowania.
Jesper
5
@Jesper: „Niezgodne styl sprawia, że utrzymanie oprogramowania jest” odrobinę „twardszy”. Pod żadnym względem nie jest to trudniejsze. Nieprzezroczysty, zły, błędny kod jest o wiele trudniejszy do utrzymania. Niespójne style w działającym kodzie to po prostu niespójne style. Niektórzy ludzie mają akcent i musisz uważniej słuchać. Niespójne style to niewiele więcej niż inny akcent regionalny (lub krajowy).
S.Lott,
1
Styl nie ma znaczenia w sensie globalnym, ale spójny styl w jednym zespole ma znaczenie. Nie zrobi ani nie zepsuje projektu, ale jeśli tak łatwo jest zachować spójność, jak nie, to dlaczego nie iść dalej i być konsekwentnym? Twój kod będzie co najmniej nieznacznie lepszy.
Bryan Oakley,
1
„Twój kod będzie w„ najlepszym ”marginalnie lepszy”. I tak, to prawie zerowy koszt i na pewno zerowe ryzyko. Ale. 100% pokrycia testowego jest o wiele bardziej wartościowe niż spójność.
S.Lott,
2

Nie martw się o wybór idealnego uniwersalnego standardu. Wszystko, czego potrzebujesz, to aby Twój zespół zgodził się na jeden standard i trzymał się go. Stwórz własny, jeśli chcesz, ale bądź konsekwentny.

Spójność poprawia współpracę, współpraca poprawia kod.

Nawet jeśli faktyczna spójność nie pomaga, fakt, że Twój zespół pracował razem, aby dojść do porozumienia, jest dobrą rzeczą. Ich niezdolność do zgodzenia się na coś tak prostego jak konwencje kodowania mówi, że pod powierzchnią mogą kryć się większe problemy w pracy zespołowej.

Bryan Oakley
źródło
0

Wspomniane powyżej oprogramowanie Sun Java CC ma nie tylko 13 lat, a niektóre z jego zasad są nieaktualne (np. 80 znaków w wierszu), ale także nie definiuje konwencji nazewnictwa, z wyjątkiem najbardziej ogólnych (obudowa wielbłąda dla klas, wielkie litery bloków) dla statycznych zmiennych końcowych i tym podobnych).

Musisz zdefiniować własne standardy dla różnych typów klas, takich jak DAO, EJB, podmioty, cokolwiek użyjesz. Sun Java CC jest jak abstrakcyjna klasa podstawowa przeznaczona do rozszerzania :)

MaDa
źródło
Zgadzam się, że Java CC firmy Sun jest trochę stara, ale ma ona na celu jedynie rozpoczęcie. Zakładam, że OP nie ma zbyt wiele czasu na zdefiniowanie własnego CC, inaczej by to powiedział! (BTW, gdzie obecnie pracuję, używają wtyczki Sonar skonfigurowanej do egzekwowania limitu 80 znaków - więc ta zasada wciąż obowiązuje i działa w niektórych sklepach).
Andres F.,
Oprócz innych powodów, czynnikiem decydującym jest czytelność. Konieczność skanowania dużej odległości wzdłuż linii jest znacznie mniej wydajna niż skanowanie w dół. Dzięki dobrze sformatowanemu kodowi możesz szybko skanować niepotrzebny kod.
BillThor
Jeśli masz problemy z 80 znakami w wierszu, albo masz niesamowicie długie identyfikatory, albo nakładasz niewiarygodnie dużo na pojedyncze wiersze. Ten pierwszy jest głupi (czy nie można oddać sedna do mniejszego niż to?), A ten drugi wskazuje na pilną potrzebę refaktoryzacji. Automatyczne formatowanie przy zapisywaniu jest świetne, ponieważ nie musisz się już martwić formatowaniem; oprogramowanie obsługuje to za Ciebie.
Donal Fellows
@DonalFellows Tak, w dzisiejszych czasach limit 80 znaków ma przypominać o konieczności refaktoryzacji, a nie z powodu małych ekranów terminali.
Andres F.,
0

Jak wspomnieli inni tutaj, możesz wyszukać w Internecie jeden z niewielu popularnych „przewodników po stylach” dla Javy i przekonać wszystkich członków zespołu, aby trzymali się ich. Niektóre narzędzia do sprawdzania kodu w twoim ulubionym IDE mogą pomóc ci przypomnieć, kiedy tego nie robisz.

Jednak czasami w grę wchodzi polityka. Kiedyś znajdowałem się w sytuacji, w której najbardziej zaawansowany programista w zespole nadal robi to po swojemu, nawet gdy ktoś wspomniał o potrzebie standaryzacji. W takiej sytuacji być może lepiej będzie obserwować jego styl kodu i podążać za nim, ponieważ prawdopodobnie ma on największą wiedzę na temat bazy kodu i wymagań i możesz nie chcieć tracić czasu na nadepnięcie na palce, nawet jeśli jest on trudny. Tak zrobiła reszta z nas w tej konkretnej sytuacji, a ja niechętnie podążam za nią.

Dlatego ważne jest, aby wziąć pod uwagę również swoją sytuację.

snowpolar
źródło
Co to za kraj? Brzmi jak coś kulturowego.
@ ThorbjørnRavnAndersen Chodzi mu o to, aby powiedzieć, że ludzie mogą być odporni na zmiany, gdy „to, co robili tak długo, działa”. W tym sensie polityka jest po prostu „polityką biurową”
Robotnik
0

Wujek Bob pokazuje bardziej nowoczesny i aktualny styl kodowania w swojej książce „Clean Code”. Niestety nie zawiera żadnej listy przedmiotów. Musisz to przeczytać. Sam mówi, że aby zobaczyć jego konwencje, musisz przeczytać jego kodeks. Wujek Bob jest bez wątpienia rodzajem instytucji. Książka i tak jest świetną lekturą, więc nawet jeśli jest już za późno, by ją teraz przeczytać, przeczytaj ją jak najszybciej.

Peter Kofler
źródło
0

W kodzie naprawdę liczy się niska cykliczność, mały zakres, wysoka spójność i wybór ekspresyjnych identyfikatorów. Biorąc to pod uwagę, kod staje się łatwy do zrozumienia i taki kod jest dobry.

Proponuję zajrzeć do programowania Spartan .

Większość standardów kodowania mówi, jak sprawić, by źle napisany kod wyglądał ładnie, a większość dyskusji na temat „stylu kodowania” dotyczy w rzeczywistości formatowania. Formatowanie kodu polega na wizualnym przedstawieniu struktury kodu. Jest trywialny i automatyczny i nie ma prawie nic wspólnego ze stylem kodowania, ponieważ styl kodowania nie polega na tym, jak reprezentujesz strukturę kodu, ale na tym, jak tworzysz kod.
Istnieje również wiele wojen religijnych na temat konwencji nazewnictwa, chociaż tak naprawdę to tylko hack do obejścia złego projektu. Nazwa jest dobra, jeśli mówi, co to znaczy. Im mniejsze i wyraźniejsze lunety, tym łatwiej wybrać taką nazwę.

back2dos
źródło