Zalety i wady przymusowej Code sformatować

19

Obecnie pracuję w miejscu, które mogą być patrząc na zmusza deweloperów do korzystania z automatycznego formatowania kodu kontroli wersji na check-in. Szukam dla programistów opinii na temat zalet i wad w ten sposób ... jak myślisz, że to pomoże lub utrudnić deweloperom. Mój konkretny przypadek dotyczy Java / JSP, ale myślę, że pytanie może dotyczyć dowolnego języka.

Nerdfest
źródło
JSP auto-formatowanie? Obejmuje to kod HTML / XML i formatowanie, które może bardzo łatwo uszkodzić / zmienić wynikowy wynik.
edA-qa mort-ora-y

Odpowiedzi:

23

Myślę, że to bardzo ważne, aby to zrobić. Dlatego:

  • To sprawia, że diffs kontroli źródła pokazują tylko rzeczywiste zmiany kodu, a wszystko, ale eliminuje „diff hałas” z powodu spacji i innych opcji formatowania nieznaczących
  • Sprawia, że ​​cały kod jest bardziej podobny, dzięki czemu deweloperzy mogą wygodniej parować i udostępniać podstawy kodu

Jeśli to zrobisz, polecam wszystkim sprawdzenie całego kodu, a następnie jedna osoba przeformatuje całą bazę kodu, a następnie sprawdzi to wszystko z powrotem, więc jest jeden „gigantyczny” zestaw zmian do formatowania (który każdy może zignorować), po tym, wszystkie są prawdziwe diffs dyferencjału kod.

Jeśli zrobisz to po trochu, będziesz mieszania prawdziwe zmiany kodu z zmian formatowania i rzeczy będzie się niepotrzebnie Messy w zmianie ziemi.

Czech
źródło
1
Gryzienie kulę na globalnych zmian jest naprawdę najlepszym sposobem, zgadzam się; zrobić to i nikt nie musi się martwić o nim nigdy.
Patrick Hughes
... dopóki nie zmienisz konwencji stylu.
Nerdfest
1
@Nerdfest Następnie należy zastosować nową konwencję dotyczącą całego projektu w jednym popełnić. To nic wielkiego.
Gizmo
2
Twój „diff” rodzaju narzędziem do bani, jeśli nie może obsłużyć spacje zmienia poprawnie.
EDA QA mort -ORa Y
2
Nie zawsze będą wyjątki gdzie nieco inny format jest prawdopodobnie czystsze niż wyznaczonym stylu. Automatyczne konwertowanie może zatem często ukrywać przeznaczenie niektórych bloków kodu, co jest tak samo dobre, jak dodanie defektu do kodu.
EDA QA mort -ORa Y
10

Zamierzam wrzucić własną odpowiedź tutaj jako ludzie wydają się być jedynie dodanie zalety. Wady, które postrzegam jako:

  • Eliminuje możliwość „lepszego” niż automatyczny formatator… spowoduje to cofnięcie czystszego formatowania. Przykładem mogą być oparte na kolumnach deklaracje parametrów, listy dyskretnych dodatków do obiektów itp.
  • Tworzy odporność na zmienne konwencje stylu, jak to będzie teraz tworzyć duże mylące zmiany Diff.
  • Usuwa możliwość formatowania w „specjalnych przypadkach”, gdzie alternatywny format zwiększyłby czytelność kodu.
  • Wiąże Cię to z używaniem IDE, które obsługują dokładnie potrzebne funkcje formatowania. W innym IDE brakuje jednej z potrzebnych opcji, spowoduje to co najmniej pewne problemy.
  • Staje się problematyczne dzielenie zapisu repozytorium kodu z grupy zewnętrznej, chyba używają dokładnie tych samych konwencje formatowania jako grupy (Zwykle tak, ale nie zawsze).
  • Nie zawsze będą wyjątki gdzie nieco inny format jest prawdopodobnie czystsze niż wyznaczonym stylu. Auto konwertazy więc często może ukryć intencją niektórych bloków kodu, który jest faktycznie tak dobry jak dodanie defekt w kodzie.

Mówiąc najprościej, non-zautomatyzowany zbiór konwencji ustanawia minimalne wymagania styl / czytelności, gdzie zautomatyzowane konwencje ustawić minimalny i maksymalny.

Pamiętam, że patrząc na VB (w wersji 5 może) i znalezienie jeden z najbardziej irytujących rzeczy o nim, że to będzie przymusowo sformatować mojego kodu i usunąć rzeczy wykraczające poza swoim podstawowym formatowaniem.

Nerdfest
źródło
Jeden nad drugim konwencja formatowanie rzadko daje żadnych korzyści, jeśli chodzi kosztem spójności. Przyzwyczajcie się do tego. Rada Śledź czeska i stworzyć okres karencji, aby określić style formatowania, a następnie trzymać się z nimi. Zmiana formatu i tak nie powinna być lekka.
JeffO
3
@Jeff, nie sądzę, że on popiera niespójne formatowanie kodu, ale raczej spójne formatowanie kodu, które jest trudne do zautomatyzowania. Na przykład, wiele stylów kodowania określić dostosowanie kolumn w estetyczny sposób, gdy masz kilka wierszy powiązanych danych razem. To znacznie poprawia czytelność, ale jest to bardzo trudne do zautomatyzowania z definicji „estetyczny” lub „podobne”. To jest powód, niektórzy formatujących kodu pozwoli ręcznego formatowania, aby zastąpić w pewnych okolicznościach.
Karl Bielefeldt
1
Jest o wiele lepiej mieć spójnego formatu 99,9% czasu i pogodzić się z nieparzystej bit osobiście nie podoba, niż znosić niezdyscyplinowany mismash. Prawdopodobnie zależy mi od tego, jak zdyscyplinowany jest zespół, w którym leży równowaga. Jeśli trzymać się ustalonych norm dla języka, wszyscy porządni editors / IDE będą zdolne do formatowania tamtędy. Jeśli nalegasz na odejście od norm, będziesz miał kłopoty.
mattnz
3

Uważam, że wymuszone formatowanie kodu jest świetne. Pozwala deweloper przemierzać cały korpus kodu bez konieczności ich oczy odbijają wszędzie. Posiadanie tego standardu pomaga początkującym programistom przełamać złe nawyki.

Woot4Moo
źródło
3

Podstawowa wada traci niestandardowe formatowanie gdzie tak naprawdę się liczy.

Wyobraźmy sobie typową testow jeśli (), która zakończy się niepowodzeniem, jeśli którykolwiek z warunków określonych jest obecny, ale nie spełnił ...

  if(
      (user.id == TEST_ID)
    ||(
         (user.id == UserID)
       &&( 
             ( user.type == HUMAN_USER && user.name.size() >= MIN_NAME )
           ||( user.type == EMULATION && input.source != SOURCE_INTERNAL ))
       && ( user.email == NULL || emailValidator.isValid(user.email))
       && ( (user.phone == NULL) == (user.type == EMULATION) )

       // several more lines like this.)
    ){ /* handle results */ }

Jest to czytelne dzięki rozsądnej Wcięcia następujące struktury logicznej warunków.

Teraz twój zautomatyzowane narzędzie ma pojęcia o logicznej separacji różnych warunkach na linie pokrewnych. Nie widzi powodu, dla którego każda kępa 3-4 warunki w jednej linii i podzielić następny stan na pół. Albo będzie to porównanie, jeden wyraz na linię podziału. Może nawet ładniej wyglądać na ekranie, ale logika zostaną utracone.

SF.
źródło
Jest bałagan, mój mózg po prostu topił pozyton. Tyle niezgodność z około spacji (i). Właśnie dlatego musimy maszyny do formatowania kodu. I zawsze można umieścić jeden komentarz liniowy przed / po (zależy od konwencji) do stanu siły grupowania. Byłoby to również pomocne, aby wyjaśnić czytelnikowi reguł biznesowych za tym warunkami - prawo w ten pojedynczy komentarzy liniowych.
Štefan Oravec
@ ŠtefanOravec: Przeprowadź to przez autoformatter i zastosuj te komentarze. Sprawdź, czy jest bardziej czytelny. Użytkownik testowy - zawsze. Użytkownicy z prawidłowymi nazwami użytkowników. Emulowani użytkownicy - tylko źródła zewnętrzne. Adres e-mail, jeśli jest obecny, musi być ważny. Użytkownicy muszą mieć numer telefonu; emulowane - nie wolno. Zobacz, jak Twoje komentarze jednowierszowe są wyrównane z kodem automatycznie sformatowanym.
SF.
2

Dodałem odpowiedź z wadami i dorzucę co uważam za wielką zaletę, jak również.

Podczas korzystania z automatycznego kodu formatowanie na popełnić, to jednak w rzeczywistości otwiera możliwość osobistych preferencji bez wahania zwykłym efektem mający swoje preferencje zadane na innych. Możesz mieć swój kod formatu IDE do wspólnej normy dotyczącej popełnienia, ale wyświetla je do Ciebie w preferowanym formacie bez wpływu na innych.

To jest dla mnie niemal Święty Graal konwencji opiera się kodowanie ... masz w sobie zalety wspólnego formatu kodu, ale nadal pozwalają preferencje osobiste mają być obsługiwane bez konfliktów.

Nerdfest
źródło
0

To zależy od Twoich potrzeb, ale niektóre contraints są bardzo pomocne, jeśli na przykład każdy () powinny być przestrzegane przez klamrami, ponieważ jest to dość łatwe do uzyskania takiej czy źle, jeśli jesteś refaktoryzacji.

Rozważ ten przypadek:

if( x == 0 ) 
   return foo;
//do something else
return bar;

Jeśli chcesz teraz dodać rejestrowanie w przypadku if, możesz przypadkowo napisać:

if( x == 0 ) 
  log.info("x was 0");
  return foo;
//do something else
return bar;

I nagle twoja metoda zawsze powraca foo .

Edycja: nie dotyczy to automatycznego formatowania, ale raczej sprawdzania stylu. Przepraszam, jeśli ta odpowiedź również była nie na temat. :)

Tomasz
źródło
To raczej kwestia stylu kodu, a nie formatowania. Istnieją do tego narzędzia do kompilacji.
@ Bohemian, masz rację, źle odczytałem pytanie. Wybranym narzędziem do budowania jest checkstyle btw. :)
Thomas
0

To znacznie ułatwia jednolite kod w firmie, a dzięki temu na ogół wytwarzają bardziej zrozumiałe i łatwiejsze w utrzymaniu sposób strukturę produktu.

talikole
źródło
0

Cóż, zalety są takie same jak każdy kod formater, jak standaryzacji kodu, semantyczny między deweloperami, itp Jedyne ewentualne wady widzę to brak ludzkiego oka po formatowanie, aby dodać pewnymi wyjątkami, itd.
Więc Domyślam się, że lepiej rozważyć formatator IDE zamiast formatera czasu zameldowania.

bluefoot
źródło
0

Z mojego doświadczenia wynika, że ​​jest to dobra rzecz. Bez niego, kod porównuje często wykazują bałagan białe znaki formatowania i może ukryć rzeczywiste zmiany kodu. Z mojego doświadczenia wynika, brudząc z czyjegoś formatowanie nie jest grzechem jest robione się, szczególnie z potencjalnych korzyści spójności całej drużyny.


źródło