Форматування коду погано при використанні VCS?


24

Я майже завжди відформатую свій код, перш ніж взяти на себе обов'язки, щоб переконатися, що він зроблений належним чином. Більшість моєї команди не дуже переймаються і не завжди форматують свій код належним чином (незначні речі, які не впливають на код, але впливають на читабельність при спробі його підтримувати).

Нещодавно я встановив електроінструменти VS, який має опцію "Форматувати при збереженні", і вніс зміни до файлу, який раніше не був відформатований. VP розробник просто прийшов до мене і дорік мені за форматування, оскільки в інструменті злиття виявляється, що майже весь файл змінився замість просто рядка або двох (тож він не може точно бачити, що я легко змінив), і сказав мені відключити формат збереження в майбутньому. Хоча я розумію це занепокоєння, мені буває важко іноді розбирати код, який неформатований, і IMO його слід форматувати належним чином у будь-якому разі. Зауважте, що я не просто переформатую речі на примху. Але, коли я пишу код, я або використовую електроінструмент, або натискаю клавішну команду, щоб відформатувати текст, щоб його було легше читати, і в SVN це відображається як модифікація.

Тож я запитую, чи завжди форматування коду - це погано? Чи є його занепокоєння більш вагомим, ніж переконання, що код читається?


8
він має рацію, тож чому б не змусити команду використовувати також інструмент форматування-збереження, тоді ви отримаєте чудово відформатований код, який легко читати, і легко переглядати фіксацію.
gbjbaanb

12
Більшість хороших інструментів порівняння файлів мають фільтр для "незначних відмінностей" або "ігнорувати пробіли". Деякі, як Beyond Compare, постачаються з попередньо встановленими мовними фільтрами. Використовуйте його на вашу користь, якщо у вас є.
Майкл К

7
Форматування коду так само важливо, як і внесені зміни. Читання має бути одним з найвищих пріоритетів, коли ви в команді. Ваш ВП повинен це знати і бути турботою про це.
Едгар Гонсалес

@Edgar: +1. ВП занадто прискіпливий. Спочатку читабельність ... а варіант ігнорування пробілів означає, що це не велика справа. А це також означає, що існує більша проблема, оскільки решту команди не хвилює. ВП повинен бути більше стурбований цим.
quick_now

Відповіді:


41

По-перше, вашій команді потрібно вибрати конвенцію про форматування та дотримуватися її. Потрібно домовитись, щоб усі дотримувалися цього, щоб у вас не було людей, які б'ються за те, як слід виглядати. Це не повинно бути лише тим, що ви робите самостійно.

Що стосується вашого реального питання. Форматування коду - не погана річ. Що погано, це внесення великих змін у форматування в той самий фіксатор, що і зміни коду. Коли ваша команда досягне консенсусу щодо того, як слід форматувати речі, зробіть один прохід через код і відформатуйте все. Перевірте це самостійно. У повідомленні про виконання буде чітко видно, що зміни є просто білим простором, а не функціональними. Тоді, коли вам потрібно внести функціональні зміни, вони знаходяться в іншому об'єкті, щоб їх можна було чітко побачити.


він все ще не допомагає, якщо ви хочете порівняти зміни з кількох версій тому, але це краще, ніж зміна коду + зміна формату за 1 хід. Звичайно, ця відповідь стосується і рефакторингу.
gbjbaanb

1
+1: Крім цього, добре використовувати щось на кшталт Stylecop або якийсь інший інструмент, який автоматично форматує та застосовує стиль. Потім синхронізуйте налаштування між усіма членами команди, щоб форматування було послідовним для всіх, і вам не обов’язково потрібно пам’ятати, що таке «правильне» правило формату.
Райан Хейс

3
Якщо ОП отримала догану за спробу форматування одного документа, щось говорить про те, що він не міг запропонувати використовувати StyleCop.
Уейн Моліна

3
@gbjbaanb: Так. Ось чому найкраще приймати подібні рішення на початку. У проекті, на якому я зараз перебуваю, параметри форматера Eclipse перевірені у сховищі, тому ми знаємо, що всі мають однакові налаштування.
unholysampler

1
@quickly_now: Тому ми маємо менеджерів з правами вето. Якщо люди не можуть погодитися, вони можуть прийняти рішення.
unholysampler

29

Ні, форматування коду дуже важливо . Однак комісії слід здійснювати у двох групах:

  1. Косметичні зміни - все, що робить код більш читабельним.
  2. Інші зміни - все інше, що впливає на код.

Використовуйте повідомлення "зобов'язання", щоб вказати, що змінена лише косметика. Їх можна легко пропустити при пошуку більш істотних модифікацій.


3
Крім того, також є хорошою практикою прийняти рішення про певну конвенцію форматування між вашою командою. Не просто форматуйте код від інших людей, не попередньо обговорюючи це.
Стівен Євріс

Так ... Але ти знаєш, іноді настільки спокусливо відформатувати цей проклятий безлад "поки ти на це". Крім того, спроба відокремити косметичні зміни від функціональних змін може бути болем, якщо ви використовуєте VS і він щось форматує автоматично. О, і ніхто не скаже, що ви робите якісь дурні формати, хоча у вас є дуже важливі завдання,
виконуючи перегляд

10

У вас обох є крапка, але ви можете обоє отримати те, що хочете. Спочатку відформатуйте код, позначте лише цю зміну. Далі внесіть свої функціональні зміни та поставте це як другий крок.


3
Я думаю, що це найкраще рішення для вашої нинішньої ситуації, але вам слід поговорити про це зі своєю командою. Однак у вас є більша проблема, яка полягає у відсутності стандарту кодування.
Томас Оуенс

2
Домовились. Мені цікаво, чи середовище ОП - одне з тих ковбойських місць, де норми виконуються для того, щоб "швидко вивернути речі".
Уейн Моліна

4

Я теж відтворюю інструмент для збирання ниток, тож ось декілька порад:

  • Необхідний перший крок: змусити команду погодитись із базовим стандартом форматування, таким як вкладки проти пробілів, позиції дужок, стилі коментарів тощо. Тепер ваші зміни форматування не будуть для всіх повним сюрпризом, і ви не зробите кроку на будь-яких пальцях ніг.

  • Очистіть форматування лише навколо зміненого коду. Якщо ви внесете зміни лише до однієї функції, тоді очистіть цю функцію. Принаймні з часом у вас з’явиться кращий вигляд коду.

  • Робіть капітальний ремонт форматування як окремий комітет, без інших змін коду. Ви повинні робити це лише тоді, коли ви рідше захочете порівнювати код після зміни до зміни перед зміною, оскільки порівняння у різних подібних може бути дратує. Зазвичай я роблю очищення, як перше, перш ніж розробити цей код.

  • Отримайте хороший інструмент розрізнення, який може робити мовне залежність від значущих змін та несуттєвих змін. Моя улюблена різниця За межами Порівняти відмічає фактичні зміни коду в одному кольорі, а пробіли / коментарі - лише відмінності в іншому.

відредагуйте ще одну пораду:

  • Він залежить від форми мови до мови, але для більшості дійсно косметичних змін у коді ви маєте змогу порівнювати складені бінарні файли до та після капітального очищення, щоб бути абсолютно впевненим, що ви його не приглушили.

До тих пір, поки ви не включите теги VC у бінарний (або збірну інформацію).
Ватін

2

Ви не повинні переформатувати та вносити зміни до коду інших людей, якщо:

  • ви менеджер, який намагається встановити стандарти кодування команди
  • ваш менеджер попросив вас очистити код, щоб дотримуватися стандартів команди кодування
  • ви прибираєте код від розробника, який більше не працює у вашій команді, щоб дотримуватися стандартів команди кодування.

Ви помітите у всіх випадках, коли я посилаюся на стандарти кодування команди. Я впевнений у розумних, узгоджених стандартах кодування для команди. Якщо у вас їх є, то оригінальний розробник повинен повернутися назад і очистити свій код, щоб дотримуватися стандартів команди, не слід робити цього за їх спиною. Якщо у вас немає стандартів (і вам слід), ви не повинні змінювати код іншого члена команди, щоб він дотримувався вашої філософії, особливо за їх спиною. Пам'ятайте, що ви є частиною команди, і хоча стандарти кодування є важливими, так само як і довіра та повага між членами команди.


"За їхніми спинами": це повертається до психологічних питань кодового володіння (або розвитку війни з дерновими).
rwong

2
"Код інших людей" - цікавий спосіб його вимовити. Я працюю над продуктом своєї компанії, складеним з коду, яким володіє моя компанія, над яким ми працюємо членами своєї команди. Це не може за їх спиною жодним чином зафіксувати це до стандартів, працюючи над ним. Однак я погоджуюся, що ідеальне рішення - зробити оригінальний розробник очищенням його до стандартного.
Caleb Huitt - cjhuitt

@Caleb: Добирається важко, якщо вони просто відмовляються.
quick_now

Під "чужим кодом" я не маю на увазі право власності, я маю на увазі те, що вони написали, і вважаю, що вони все ще відповідають за підтримку. За відсутності стандартів кодування, якщо я впроваджую клас з 1000 рядків коду, і ви вносите зміни в 2 рядки, щоб виправити деяку поведінку і переформатувати весь файл, я буду дуже здивований, коли відкриваю файл. Як члени команди, ми не повинні робити цього один одному. Якщо ви перевірите цей файл із повним переформатуванням і навіть не даєте мені голову, це не дуже добре для команди.
cdkMoose

В оригінальному обговоренні ОП я читав, що бути середовищем без стандартів кодування (або не належним чином), тому я відповів як такий. У такому середовищі один розробник не повинен нав'язувати свої стандарти іншим.
cdkMoose
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.