Без комментариев!

05.01.23

Разработка - Рефакторинг и качество кода

Подниму холиварную тему. Несколько раз коллеги меня спрашивали - почему в своем коде я не пишу комментариев. Отвечаю на этот вопрос статьей. Присоединяйтесь к обсуждениям, что вы думаете по этому поводу. Комментарии в коде - нужны или нет?

Все примеры в данной статье - вымышленные, однако созданы "по мотивам" реально встреченных комментариев.

По роду работы мне приходится читать и редактировать очень много кода. И меня огорчает огромное количество комментариев в коде, с которым я встречаюсь. Считаю, что комментарии вредны, опасны и не нужны. Комментарии мне настолько не нравятся, что в своем коде принципиально их не использую (кроме отдельных случаев, о них ниже). Обосную свое отношение.

Для начала изложу свои соображения по поводу того, почему вообще эта тема поднимается.

Обратимся к библии программиста 1С - документу "1С:Предприятие 8. Система стандартов и методик разработки конфигураций", раздел "Тексты модулей".

 

 

Позиция 1С по поводу комментариев в коде такова - комментарии можно оставлять, при этом есть некие условия по форматированию комментариев.

Попробую классифицировать типы комментариев и понять причины, что заставляют программистов оставлять комментарии в своем коде. по моим наблюдениям основные типы комментариев такие:

  1. Указание автора кода и номера задачи (авторский комментарий)
  2. Сохранение чужого (старого) кода
  3. Пояснение того, что делает код
  4. Отражение событий в мире и организации

Разберу каждый тип подробнее.

 

1. Указание автора кода и номера задачи

 

 

Это так называемый "авторский комментарий".

Наверное даже не надо ничего пояснять. Это традиция. Так все делают и будут делать. Когда не было технологии выгрузки исходного кода в git, комментарий был единственным способом указать себя автором изменения. У многих даже настроены шаблоны - вставка начала своего кода, вставка окончания и всякое подобное. Вот пример шаблона, который вставляет имя пользователя конфигуратора и текущие дату и время.

// Добавлено <?"""", ИмяПользователя> <?"""", ДатаВремя, """">

Такое комментирование порождает нагромождения, через которые весьма сложно пробираться:

	
	// Вставка Иванов 11.10.2019 14:35:17
	ДанныеЗаполнения.Вставить("Приоритет", ПриоритетПоПартнеру(Заказ.Партнер));
	// КонецВставки Иванов 11.10.2019 15:35:17
	//Смирнов 2020-01-01
	ДанныеЗаполнения.Вставить("Комментарий", "Создан автоматически из обработки");
	// Начало изменения Петров 25-01-2021
	// Заявка 33555 - указать адрес доставки
	ДанныеЗаполнения.Вставить("АдресДоставки", НовыйАдресДоставки);
	// Конец изменения Петров 25-01-2021

У нас есть некая структура, которая затем используется для заполнения какого-то объекта. Это самый невинный пример, но тут мы видим на 3 строчки кода 6 строчек комментариев. Зачем мне знать сейчас, в 2023 году, что три года назад в структуру добавили ключ Приоритет, а позже добавили еще два ключа? Сейчас в этом нет никакого смысла, два программиста, оставившие эти комментарии, уже не работают у нас, а система учета заявок и номер задачи неактуальны - мы перешли на другую систему учета заявок.

Эти комментарии мешают пониманию кода. Банально приходится читать больше текста, они отвлекают от сути.

Моя основная претензия в том, что такие комментарии устаревают и по прошествии какого-то времени их наличие скорее раздражает, чем вызывает позитивные чувства (даже у любителей комментариев).

Хорошо, но авторские комментарии о "свежих" изменениях полезны? Нужны ли сейчас такие комментарии? Большой вопрос. 

EDT идет уверенной поступью и все больше и больше команд переходят на разработку в EDT. Но даже если вы работаете в конфигураторе, уже давно есть инструменты, с помощью которых выгрузка исходного кода становится легкой и приятной. А если в вашей компании это не принято, вы всегда сможете выгрузить в гит самостоятельно, прямо на своем компьютере.

Git Blame - это технология, показывающая автора каждой строки кода.

 

 

Здесь я привел скриншот из модуля, открытого в Visual Studio Code. При наведении курсора на строку кода показывается, кто и когда эту строку изменил. Посмотрите, какая красота! Ничто не отвлекает от чтения и понимания кода, а если потребуется узнать, кто и когда написал какую-то строку - вот она, эта информация под рукой.

Кажется, можно перестать выделять свой код авторскими комментариями, правда?

 

2. Сохранение чужого (старого) кода

 

 

Эта причина иногда также вызвана соглашениями, принятыми внутри команды. Некоторые команды практикуют такой стиль написания кода - если надо что-то исправить, комментируем "старый" код, добавляем рядом свой, да еще и обрамляем все это авторским комментарием. Но часто программисты по собственной инициативе делают так же - старый код остается закомментированным, всегда можно вернуться к нему, убрав символы комментариев.

Я считаю такие комментарии мусором. Как правило, такой закомментированный код не пригождается впоследствии. Помните поговорку про "ничто не бывает таким постоянным, как временное"? Комментарии остаются балластом и мешают пониманию основного кода модулей.

К тому же, в нашей библии (стандарты разработки) есть специальное указание - в модулях недопустимо иметь закомментированные фрагменты кода.

 

 

Вдумайтесь, стандарты разработки ЗАПРЕЩАЮТ оставлять закомментированный код, а мы так делаем повсеместно!

Во всех вакансиях от программиста 1С требуют знание стандартов разработки и все соискатели рапортуют, что следуют стандартам. Однако это не мешает оставлять после себя шлейф закомментированных строк.

Встречал документ, в модуле которого 90% кода было закомментировано, причем блоки закомментированного кода были смешаны с рабочим кодом. Нужно ли объяснять, каково было дорабатывать этот модуль?

 

3. Пояснение того, что делает код

 

 

На первый взгляд - похвальное желание. Всем хочется, чтобы их код был понятен для понимания. Давайте оставлять поясняющие комментарии! Но и тут не все так просто.

Часто пояснение кода превращается в игру с капитаном Очевидность.

// Удалим элементы отбора Контрагент, если включена ФО ИспользоватьПартнеровКакКонтрагентов
Если ПолучитьФункциональнуюОпцию("ИспользоватьПартнеровКакКонтрагентов") Тогда
	КомпоновкаДанныхСервер.УдалитьЭлементОтбораИзВсехНастроекОтчета(КомпоновщикНастроекФормы, "Контрагент");
КонецЕсли;
	
// Удалим элементы отбора Организация, если не включена ФО ИспользоватьНесколькоОрганизаций
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций") Тогда
	КомпоновкаДанныхСервер.УдалитьЭлементОтбораИзВсехНастроекОтчета(КомпоновщикНастроекФормы, "Организация");
КонецЕсли;
	
// Удалим элементы отбора Склад, если не включена ФО ИспользоватьНесколькоСкладов
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоСкладов") Тогда
	КомпоновкаДанныхСервер.УдалитьЭлементОтбораИзВсехНастроекОтчета(КомпоновщикНастроекФормы, "Склад");
КонецЕсли;
	
// Удалим элементы отбора ЕдиницыКоличества, если не включена ФО ИспользоватьЕдиницыИзмеренияДляОтчетов
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьЕдиницыИзмеренияДляОтчетов") Тогда
	КомпоновкаДанныхСервер.УдалитьПараметрИзПользовательскихНастроекОтчета(КомпоновщикНастроекФормы, "ЕдиницыКоличества");
КонецЕсли;

Обратите внимание на код выше. Каждый комментарий в нем бессмысленен, так как из кода и так все понятно - имена процедур, функций, параметров говорят сами за себя.

Приведу другой пример - на первый взгляд тут комментарий обоснован. Но почитайте код внимательней.

// отсортируем таблицу запросом по возрастанию даты для дальнейшего использования
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Приоритеты", Приоритеты);
Запрос.Текст = "ВЫБРАТЬ
	            |	Приоритеты.ДатаЗаписи КАК ДатаЗаписи,
	            |	Приоритеты.Номенклатура КАК Номенклатура
	            |ИЗ
	            |	&Приоритеты КАК Приоритеты
	            |
	            |УПОРЯДОЧИТЬ ПО
	            |	ДатаЗаписи УБЫВ";

В запросе одно - а в комментарии совсем другое. Что произошло? В коде изначально была допущена ошибка или же логика совпадала, но потом код доработали, а про комментарий забыли?

Лучше использовать "говорящие" названия функций и переменных, если надо - выносить участки кода в функции и процедуры с ясными осмысленными названиями. Это хорошая альтернатива комментариям, правда?

 

4. Отражение событий в мире и организации

 

 

У меня есть целая подборка комментариев из кода реальных баз, которые вызывают улыбку, заставляют задуматься или просто рождают чувство легкого недоумения. Я обещал не приводить реальные примеры, поэтому привожу немного отредактированные.

Пример 1

// включил механизм 01.03.2020 года по указанию Ивановой
// выключил механизм 02.03.2020 года по указанию Ивановой. Жаль...
// две недели было потрачено на разработку...
// ПроверитьЦеныПоНовомуМеханизму(Объект, Отказ);

Пример 2

// Всех принудительно заставили работать дома, новый виток короны
//
// Я не очень рад этому
УстановитьУникальныйКодПартнера(Объект);

Пример 3

// Не верю, что это поможет. Это уже третий подобный механизм в базе.
// Может быть уже скорректируем процессы, которые приводят к косякам?
ПроверитьУникальныйКодПартнера(Партнер, Отказ);

Наверное в этих комментариях есть большой глубокий смысл. Но такой код сложно назвать чистым.

 

Когда комментарии нужны?

Есть момент, когда комментарии все-таки нужны. Более того, они необходимы. В тех же стандартах разработки (раздел Описание процедур и функций) утверждается, что они обязательны. При создании экспортной процедуры или функции мы обязаны составить комментарий, состоящий из секций "Описание", "Параметры", "Возвращаемое значение" и "Пример". Формально это комментарий, написанный по определенным правилам. По сути - это пояснение для программиста, о том, как правильно использовать функцию. Для конфигуратора или EDT это пояснение используется для контекстной подсказки (а в EDT еще и для типизирования). Это очень полезная штука.

Забавное наблюдение: как правило люди, активно пишущие ненужные комментарии, забывают указывать описания экспортных процедур и функций.

 

Заключение

Использовать или не использовать комментарии в коде 1С - решать вам.

Стандарты разработки не запрещают их использовать, а соглашения внутри команды могут обязывать оставлять авторские комментарии или обрамлять комментариями старый код. 

Возможно, я слишком серьезно отношусь к недостаткам комментирования и все гораздо проще. А что вы думаете по этому поводу?

Инструментарий разработчика комментарии самодокументированный код

См. также

Результаты ревью кода 1500+ решений каталога Инфостарт: наиболее частые ошибки разработчиков в коде

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Поделюсь своим опытом аудита кода авторских продуктов с Infostart.ru как одним из элементов применения DevOps-практик внутри Инфостарт. Будет настоящий код, боевые скриншоты, внутренние мемы от команды ИТ-лаборатории Инфостарт и прочее мясо – все, что любят разработчики.

10.04.2024    9115    artbear    84    

97

Ниндзя-код

Рефакторинг и качество кода Платформа 1С v8.3 Россия Бесплатно (free)

Предлагаю вашему вниманию советы мастеров древности. Программисты прошлого использовали их, чтобы заострить разум тех, кто после них будет поддерживать код. Гуру разработки при найме старательно ищут их применение в тестовых заданиях. Новички иногда используют их ещё лучше, чем матёрые ниндзя. Прочитайте их и решите, кто вы: ниндзя, новичок или, может быть, гуру? (Адаптация статьи "Ниндзя-код" из учебника JavaScript)

01.04.2024    2692    DrAku1a    15    

35

Практическое программирование: когда скорость важнее совершенства

Рефакторинг и качество кода Бесплатно (free)

В новом материале мы анализируем, как в программировании баланс между быстротой разработки и тщательной проработкой кода влияет на конечный продукт. Обсуждаем, почему иногда важнее сосредоточиться на скорости выполнения проекта, и когда можно позволить себе уступить в качестве ради достижения бизнес-целей.

01.04.2024    727    Prepod2003    6    

2

Когда понадобился новый оператор

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Когда понадобился новый оператор, но его нет в синтакс-помощнике, что делать?

18.03.2024    1462    ZhokhovM    4    

4

Когда разработчик платформы не добавил проверку препроцессоров

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Когда разработчик платформы решил пойти на кухню за кофе, а проверку препроцессоров не добавил, и вот тут-то и началось: "Что, опять все сломалось? Ну и кофе же я забыл сделать!".😅

18.03.2024    3156    ZhokhovM    4    

9

Реструктуризация - бесконечная история

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

При разработке программ требуемый функционал ставят на первое место, но есть еще и архитектура программы. На горизонте 5-10 лет она становится важнее функционала, который должен работать при масштабировании и росте данных. Реструктуризация 5 терабайтной базы 1С 8.2 в формат 1С 8.3, складывает весь пазл архитектурных просчетов, которые сделали ради функционала. Как это исправить? - для разработки правильной архитектуры, нужно всего лишь сместить фокус с функционала и подумать о «вечном».

29.09.2023    2235    1CUnlimited    15    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
66. sapervodichka 6827 07.01.23 21:51 Сейчас в теме
(65) Давай расходимся, бро. С Рождеством тебя, и дай бог нам всем мира в этом году.
EvgeniyOlxovskiy; noprogrammer; +2 Ответить
64. quazare 3660 07.01.23 20:36 Сейчас в теме
По своему опыту пришел к тому, что стараюсь выносить критически важные функции и процедуры в общие модули. Всю оберточную мешуру - в модуле формы

Кстати, куча «промышленных обработок» не содержат комментов и пишутся в модулях формы…. Вот уж где говнокода море
kser87; sapervodichka; +2 Ответить
68. m_aster 112 08.01.23 00:18 Сейчас в теме
Спасибо автору, интересная и нужная тема, и важная, т.к. касается культуры программирования, ну и банального порядка. Изучая Delphi в свое время, как руководство использовал оригинальный двухтомник от разработчиков самой среды - Тейксейры и Пачеко. Когда переходил на семерку также хотелось в качестве руководства взять за основу что-то от самой 1С. И прежде всего смотрел как сама фирма оформляет код, как пишет программы и т.д. Насчет комментариев, в частности, есть стандарты разработки, там четко описано как нужно оформлять те же процедуры и функции, т.е. в шапке комментариев назначание, если есть, описание параметров и т.д. Это правильно, на мой взгляд, и привычно уже, когда этого нет, чего-то не хватает. Ниже картинка двух общих модулей в составе ERP 2.5.10.74, взяты навскидку, просто посмотрите на оформление кода, справа часть с привычными глазу комментариями, слева без, все в составе одной конфигурации на поддержке. Вопрос, где правильно? В этих двух модулях также есть комментарий вида "//++...", это открывающий дополняющий код коммент и "//--...", соответственно, закрывающий. Не нравятся мне эти плюсы-минусы(режет глаз), в стандартах ничего такого не описано(есть правила для одной строки своего кода и своего кода больше одной строки), и их я в типовом коде раньше ни разу не встречал, больше в дописках франчей, ну и других разработчиков, причем, те же франчи оставляют также открывающие и закрывающие комменты как придется(обычно есть общий шаблон, чаще всего это ФИО автора и дата доработки, на мой взгляд информативнее кратко указать по правилам стандартов что доработано, добавлено, для чего и т.д.).
Прикрепленные файлы:
EvgeniyOlxovskiy; user596529_a-ivashenko60; biimmap; ardn; +4 Ответить
144. maksa2005 536 11.01.23 12:30 Сейчас в теме
(68)Извращенцы в хорошем смысле)
161. user596529_a-ivashenko60 23.01.23 15:21 Сейчас в теме
(68) Программа с комментариями смотрится куда приятнее программы без комментариев. Во втором случае у меня возникают ассоциации с разведчиками-диверсантами, которые "не оставляют следов" своей деятельности. Может быть им есть что скрывать??
TanyTany; m_aster; +2 Ответить
162. m_aster 112 23.01.23 20:12 Сейчас в теме
(161)Алексей, да, и стандарты разработки об этом же и говорят, это удобство и призыв думать о других, и совместная разработка и т.д.
Диверсанты все равно след оставляют(если только код закрыт, тогда да, наверное, есть что скрывать))), следов не будет, если они вообще ничего писать не будут, иногда кажется, может и не стоило ничего писать))), просто разбираться будешь дольше, нежели с комментами. Delphi не зря вспомнил, у нас много, кто в ней пишет, судя по вакансиям на hh.ru. Как-то писал здесь, что клиент-серверная технология ими использовалась больше 25 лет назад(по крайней мере то, с чем я начал знакомиться в Delphi 5), это та реализация, что в 1С сейчас активно развивается. И подход и обработчики, например OnCreate у формы и т.д., все как у нас сейчас. Это общий подход, должен быть, наверное, неизменным не только у них, и у нас тоже.
Насчет комментов в хелпе Delphi 11.2 сказано следующее, на мой взгляд кратко и по существу:
- Комментарии — это фрагменты текста, используемые для аннотирования программы. Комментарии предназначены только для использования программистом; они удаляются из исходного текста перед синтаксическим анализом.
- Полезно размещать комментарии в верхней части блока, чтобы объяснить его назначение.
- Полезно размещать комментарии перед объявлением класса.
- Полезно размещать комментарии перед объявлениями некоторых методов.
- Избегайте очевидных комментариев
- Помните, что вводящие в заблуждение комментарии хуже, чем их полное отсутствие.
- Не помещайте в комментарии информацию, которая может устареть.
- Избегайте заключать комментарии в рамки, нарисованные звездочками или другим специальным шрифтом(выше упомянул //++ и //-- в комментах, не зря мне это не нравится).
Для комментариев указаны к использованию символы {} и //(/*...*/ считается устаревшим в Object Pascal).
У Тейксейры и Пачеко все листинги кода снабжены комментариями в коде, особенно для длинных процедур, красиво и аккуратно, и все понятно. В демо-примерах Delphi 11 комментов немного, по делу, но там и процедуры короткие и так все понятно из названия и по функционалу.
В принципе, то же самое, что и у нас в стандартах разработки 1С.
163. m_aster 112 23.01.23 21:12 Сейчас в теме
(161)Пример кода одного из модулей демо-примера DataSnap(клиента-сервера) от Embarcadero, обратите внимание на изобилие комментов, кстати, очень широко используются попытки(try), один как-то смеялся, что я пользую этот подход, потом 1С-сервер уронил и не раз):
Прикрепленные файлы:
69. triviumfan 94 08.01.23 01:39 Сейчас в теме
Какие нежные все стали. Комментарии мешают им читать код) Чистоту требуют.
Все примеры притянуты за ушли, типичный говнокод.
TanyTany; muskul; ildary; pm74; kholkin; maksa2005; cybjavax; Andrefan; unknown181538; nyam-nyam; user1881120; +11 Ответить
99. starik-2005 3046 09.01.23 15:38 Сейчас в теме
(69)
Какие нежные все стали.
В последнее время все чаще об этом думаю ))) Иногда даже в Вашу сторону )))
muskul; maksa2005; +2 Ответить
120. triviumfan 94 09.01.23 17:36 Сейчас в теме
(99) Я сам редко комментарии ставлю, только тогда когда реально нужны, но если и натыкаюсь на чужие, то они мне только помогают, даже если там простыня комментариев нескольких товарищей - лучше уж так, а коль они давно не актуальны - молча удалю.
А тут жидкая хайп тема ради холивара.
nvinogradov; unknown181538; nyam-nyam; user1881120; starik-2005; +5 Ответить
70. RALIN123 38 08.01.23 02:37 Сейчас в теме
Заключение
Использовать или не использовать комментарии в коде 1С - решать вам.

Несколько раз коллеги меня спрашивали - почему в своем коде я не пишу комментариев


Юра, все просто, ты еще юн и нашел тему пиара, молодец.

Первое, использовать или нет, решать не нам, а правилам внутри проекта, команды.

А второе, видимо ты еще не попадал в серьезные команды , где ты выходишь из зоны комфорта , где начинают не спрашивать, а объяснять что есть правила и им нужно следовать.

А комментарии писать не нужно, нужно писать документацию к своим методам. Для того что бы другие поняли.

Ставлю минус , статья не о чем.
quazare; unknown181538; nyam-nyam; cheshirshik; +4 2 Ответить
72. sapervodichka 6827 08.01.23 13:03 Сейчас в теме
(70) Саша, тему Юрий поднял актуальную и попытался проанализировать. Минуса его публикация точно не заслужила, т.к. затронула многих и породила активное обсуждение.
EvgeniyOlxovskiy; m_aster; ardn; +3 Ответить
84. ardn 628 09.01.23 12:43 Сейчас в теме
(70)
Поясните, на основе каких фактов вы сделали предположение о моем возрасте?
71. cheshirshik 64 08.01.23 09:05 Сейчас в теме
Нужны ли комментарии в коде? Я считаю, что нужны. Нужны там где это необходимо, где из контекста ряда действий не понятно, что делает код. Ещё нужны для истории задач, чтобы было понятно по какой задаче кто что писал.
nyam-nyam; m_aster; ardn; biimmap; sapervodichka; +5 Ответить
73. aximo 2033 08.01.23 14:32 Сейчас в теме
Ерунда какая - то, а не статья

правильно документировать функции или процедуры (как в типовых) - по документации появляется подсказка применения параметров... а "включил/выключил" - это полная ересь...
nyam-nyam; quazare; user1881120; +3 3 Ответить
85. ardn 628 09.01.23 12:44 Сейчас в теме
(73)
правильно документировать функции или процедуры (как в типовых) - по документации появляется подсказка применения параметров

Вы не поверите, но об этом как раз последняя часть статьи
78. mkalimulin 1180 09.01.23 11:32 Сейчас в теме
Я тоже за чистый код. У меня в коде комментарии присутствуют только в процессе разработки. Кстати, очень удобно. Открыл код, зеленого не видно, значит "созрел". А если кому чего непонятно, пусть обращаются к ChatGPT. Она им разъяснить в сто раз лучше, чем я со своими комментариями
EvgeniyOlxovskiy; starik-2005; ardn; +3 Ответить
79. Vlan 36 09.01.23 12:15 Сейчас в теме
После того, как из кода, написанного для нашей фирмы за полляма, вычищал комментарии типа "//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.", на другие комментарии смотрю лояльно - они хотя бы не раздражают.
80. user1559729 09.01.23 12:21 Сейчас в теме
0. Предположу, что истинная причина нежелания писать комментарии - обыкновенная лень... Хотя, конечно, вы в этом вряд ли признаетесь. Остальное - притянуто за уши. Где-то попался функционал с большим количеством старого мусорного закомментаренного кода, где-то комментарий забыли поправить после корректировки процедуры/функции. И вот тебе теперь - целая статья... "Ищущим повода", как говорится... Нельзя строить правила на исключениях. Попробуйте на исключениях построить правило в обыкновенной жизни, и - потерпите фиаско... Это так не работает. Что мешает лично вам (ТС) писать комментарии правильно, а не размазывать их так, как вы тут описываете, и декомпозировать процедуры и функции до "атомов"? Что насчет процедур и функций, которые возвращают наборы параметров? - ВернутьНаборПараметровБезКомментариев()? Так вы пишите? Без пояснений? Также предположу, что у тех, кто печатает вслепую, таких проблем, как у ТС, не возникает, или возникает меньше (не утверждаю, что ТС не печатает вслепую, но - в целом). Ваш надуманный "перфекционизм" разобьется о стену иллюзий тогда, когда вы реально в коде столкнетесь с тем, кто желает писать код также, как и вы (не исключая - по мотивам данной статьи...). Или тогда, когда будете "долго понять", что же имели ввиду официалы, забывшие прокомментировать новую функцию. Они же, конечно, забыли подвязать вас к своему Git'у? И кто его знает, что они имели там ввиду... Или когда сами, возвратившись к собственному ранее написанному коду, сходу не разберетесь, что же этот код должен делать (так, или, всё-же, иначе). Конечно, сейчас вы считаете, что, как минимум для себя, пишете понятно, но - время покажет... Точно так же, как показывает со временем тем, кто комментарии пишет. Если уж тем, кто оставляет нормальные полноценные комменты приходится разбираться в собственном коде - то вам и подавно... И не думайте, что в вашей статье уже приведен контраргумент на это - так может думать только человек, который считает, что только он в единственном числе знает (как) и умеет декомпозировать задачи...
1. Что касается Git и прочего - на данный момент считаю, что код и комментарии к нему должны быть неразрывны - и не должны находиться в разных системах. Проблемы нахождения в разных системах, думаю, можете придумать сами, если ещё не столкнулись...
John_Davidson; m_aster; dima_home; pm74; kholkin; BomjBandit; n2m3m; nyam-nyam; _DaFNa_; sapervodichka; biimmap; user1881120; +12 Ответить
81. sm.artem 15 09.01.23 12:25 Сейчас в теме
Как правило всегда комментарии содержат номер задачи в Redmine. Без дополнительного пояснения.

Иногда пишу более подробные комментарии в процессе разработки какого-то большого функционала, чисто для себя. Потом, в процессе рефакторинга - удаляю. Но, номер задачи из трекера есть всегда.
Использование git наверное хорошо, и может быть даже правильно, но мне с ERP не зашло (слишком долго и муторно), а может просто не умею его готовить.
82. SerVer1C 776 09.01.23 12:37 Сейчас в теме
https://habr.com/ru/company/pvs-studio/blog/664272/

Имхо: комментарии в коде обязательно нужны, но те, что описывают бизнес-логику, например, почему ТЗ сортируем именно по полю1, а не по полю2, т. к. по коду и ежу понятно, что сортируем, но не понятно, почему именно по конкретному столбцу.
EvgeniyOlxovskiy; John_Davidson; ildary; dima_home; Stels; sapervodichka; biimmap; +7 Ответить
86. booksfill 09.01.23 12:45 Сейчас в теме
Давайте я приведу пример пары комментариев, может кто-то предложит, как можно сделать быстрее, читабельней, и обойтись без оных.
Разумеется, я не про писательские таланты, а про смысл.

1.
//Передача параметров "по-месту, через "?"", а не по имени, т.к.
//передача по имени, по-крайней мере в текущей верcии, не работает

Причина - потеряно 2 часа времени на поиски почему не работает передача параметров в ADO по имени.
Решения найдено не было, а первое, что придет в голову, так это передавать параметры, как раз по имени.
Тут не указан вид и версия клиента и самого MS SQL, но это излишне - если пойти на принцип, то все это
надо добывать в тек. состоянии, а не на дату комментария.

Сразу понятно, что вот не вышло и, если у вас нет веских причин, лучше не бороться с ветряной мельницей.

2.
//Да, неверно не учитывать возвраты по заказу при расчете мотивации, но таково распоряжение (заявка 0126789 от 30.03.2022)
//Чтобы вернуться к верному варианту достаточно убрать в запросе "ИЛИ ЛОЖЬ" см. текст ниже.

Без этого комментария сначала два раза правили запрос на "правильный" и потом разбирались с жалобами и стонами.

А через 3-и месяца спохватились ибо пошла "оптимизация" от менеджеров и велели сделать "правильно", благодаря этому примечанию и "мертвому коду в тексте запроса" все починили за 5 минут (Не 20с, т.к. все же надо проверять, что ты включаешь обратно).

Комментарий, казалось бы, после этого надо убрать, но буквально через 5 дней наличие оного позволило сэкономить кучу времени при разборках.

Я могу придумать способ обойтись без комментариев в обоих случаях, но не могу придумать ни одного, который был бы удобней и быстрее.

Например, второй случай реализуем с помощью коммитов в GIT и созданием (а без этого кто будет читать коммент в GIT для "точно неправильного запроcа" ?) unit теста, шоб валился и... сообщал ровно то, что было написано в комментарии.
EvgeniyOlxovskiy; dima_home; Cmapnep; biimmap; +4 Ответить
92. пользователь 09.01.23 14:28
Сообщение было скрыто модератором.
...
93. awk 742 09.01.23 14:36 Сейчас в теме
Комментарии нужны только тогда, когда:

1. Они требуются стандартами 1С (экспортные процедуры и функции)
2. Когда они требуются корпоративным регламентом (договоренности надо соблюдать, например: авторский комментарий).

Все остальное это повод задуматься: А не говнокод ли тут?
EvgeniyOlxovskiy; ardn; kuntashov; +3 1 Ответить
107. пользователь 09.01.23 16:43
Сообщение было скрыто модератором.
...
109. awk 742 09.01.23 16:49 Сейчас в теме
(107) Не нет, а да. В противном случае читая код конфигураций, вспоминается Роман Карцев: "Зелень, зелень, зелень! Я: – Дайте два пучка! – Отойди! Зелень, зелень! – Дайте три пучка! – Отойди, я доллары меняю! Зелень! Зелень!"...
110. пользователь 09.01.23 16:51
Сообщение было скрыто модератором.
...
111. awk 742 09.01.23 16:54 Сейчас в теме
(110) Для понимания, я по морде бью. А зелень удаляю, что бы читать не мешала, а то код метода на 27 дюймовый 2к монитор не влазит.
112. пользователь 09.01.23 16:56
Сообщение было скрыто модератором.
...
113. awk 742 09.01.23 16:57 Сейчас в теме
(112) Молодой - не понимает...
114. пользователь 09.01.23 16:59
Сообщение было скрыто модератором.
...
98. starik-2005 3046 09.01.23 15:32 Сейчас в теме
Сколько у народа нагорело-то! Даже читать не стал комменты и вторую половину статьи. Но свое отношение все-же выскажу.
1. Комментарии - это элемент рабочего процесса программистов, работающих с кодом.
2. 1С говорит, что отлаженные модули не должны включать комментарии. "Отлаженные" - ключевое слово.
3. Если команда работает быстро и гибко, то смысл оставшегося старого кода в том, чтобы потенциальную аварию с новым кодом предотвратить. Например, есть разрабы, рефакторящие код, а есть команда, которая поддерживает оперативный контур. И вот второй команде старый код может пригодиться при очередной аварии на выкаченном релизе.
4. Авторские комментарии нужны хотя бы для того, чтобы быстро разобраться, чей это код. Да, гит и прочие фишки - штука суперская, но она далеко не у всех. Может быть в ЕДТ и есть возможность посмотреть, кто внес ошибку в код, но обычный конфигуратор потребует сравнить версию кода и версию хранилища до изменения. Часто это приводит к достаточно непростой работе поддержки по поиску виновника и попытке выяснить, с какой целью все это делалось. Авторский коммент эту проблему быстро решает.

Но да, от комментариев в дальнейшем стоит избавляться, если вы пилите коробку 1С совместимо или совместно, т.к. авторский коммент в таком коде нафиг никому из клиентов не вперся.

В общем, комментарии - это элемент процесса разработки, который при переносе кода из ветки DEV в ветку PROD должен убираться. Но комментарии, описывающие назначение интерфейсов общих модулей и модулей прикладных объектов просто обязаны присутствовать, как это сделано в БСП.
EvgeniyOlxovskiy; sapervodichka; pm74; avbolshakov; awk; AllexSoft; user1881120; ardn; biimmap; dklimchuk; +10 Ответить
106. пользователь 09.01.23 16:09
Сообщение было скрыто модератором.
...
100. rwn_driver 8 09.01.23 15:47 Сейчас в теме
Добрый день.
Совет про Git скоро может стать неактуальным...
Возьмут и внесут в "санкции"...
rpgshnik; AllexSoft; biimmap; user1559729; +4 Ответить
104. starik-2005 3046 09.01.23 15:57 Сейчас в теме
(100)
Возьмут и внесут в "санкции"...
Гит Торвальдс на коленке за полчаса написал (ну или около того). Ну и альтернатив куда больше одной. Не думаю, что это будет какой-то великой проблемой.
108. пользователь 09.01.23 16:45
Сообщение было скрыто модератором.
...
115. starik-2005 3046 09.01.23 17:01 Сейчас в теме
(108)
С процессорами
А какие проблемы с процессорами?
116. пользователь 09.01.23 17:02
Сообщение было скрыто модератором.
...
117. starik-2005 3046 09.01.23 17:03 Сейчас в теме
(116) Где конкретно их нет? Кого "их"?
118. пользователь 09.01.23 17:05
Сообщение было скрыто модератором.
...
147. starik-2005 3046 11.01.23 15:27 Сейчас в теме
(118)
Нигде. Кроме
Интрига. И "нигде", и "кроме". И такое впечатление, что 1С только на тех, которых "нигде" и "кроме" работать может, а на тех, которых "везде" - нет.
105. user1559729 09.01.23 15:57 Сейчас в теме
(100) Да, я вот тоже в своё время задавался вопросом: "Ах!.. Отче же Eclipse, а не ванильная IntelliJ?!!...".
Время показало правильный выбор.
135. user1559729 10.01.23 10:42 Сейчас в теме
(105) опечатался - "отчего же", конечно
119. AllexSoft 09.01.23 17:10 Сейчас в теме
Все таки я бы выбрал код в котором есть комментарии чем код в котором их нет.
1. Авторские комментарии в целом не нужны, если это собственная разработка например или собственный объект в типовой. Когда дорабатывается типовой функционал, особенно если доработок много тут при обновлении без комментариев никак. Для сравнения\объединения каждый раз в гит лазить не будешь, объемы разработки могут быть достаточно большие, а конфигурации поставщика (для трехстороннего сравнения) может и не быть, как у нас например.. Без комментариев часть доработок будет снесена и это точно, особенно если не присутствует достаточное покрытие тестами (что еще очень очень редко бывает). Да и еще помнится совсем недавно многие использовали svn например (не в 1с), потом вот гит.. а завтра может быть какой-нибудь ruGIT или 1C сделает свое (например для форм, скд, макетов, и тд которые в xml гит вообще неудобный) и все побегут туда... коммиты из гита то же качать будем в новую систему версионирования ? Нет уж, в коде.. Номер задачи хз, специфика, если франч ну наверное надо их, если собственная команда - тут под вопросом, мы например решили что нам не надо и зафиксировали формат комментариев в соглашениях.
2. Сохранение кода - тут как вы правильно написали смотри итс, там написано нельзя, значит нельзя.. да и не зачем реально.
3. Пояснение что делает код - вот тут как бы в том же итс написано что комментарии это то что поясняет код.. сама 1с заявляет нам о том что код должен комментироваться. Конечно не стоит в комментарии повторять то что в коде написано, но те же запросы могут быть не на одну сотню строк, а еще и склеиваемые в рантайме - там комментарии обязательно я считаю, там из контекста ничего не понятно зачастую. А еще есть специфика работы, ну например есть у нас модуль с расчетом рассрочек или штрафов, он вылизан, тщательно протестирован, но иногда меняются некоторые вводные по рассрочкам, добавляются новые варианты расчета графика платежей - там без комментариев никак, то что кажется очевидным для программиста на проверку оказывается нужно делать по другому, потому что есть локально нормативные акты организации (приказы) или нормы федеральных законов которые говорят как надо, а не как логично... бывает всякая производстенная специфика, интеграции различные которые то же надо тщательно комментировать (с документацией к какому-нибудь порталу регистрации договоров в росрестре каждый раз лазить не будешь, он большой, сложный, и на каверзные вопросы отвечал лично разраб той системе в вотсапе..). А говорящие названия переменных\методов\объектов это конечно всех правильно, только 1 из 10 программистов может емко выразить сущность данных которые там будут храниться или обрабатываться. Иногда это просто невозможно.
4. Не вижу ничего плохого что бы фиксировать какой то процесс организационный в комментариях, ну например // Этот код меняется каждый месяц, может уже согласуем регламент у руководства как работает отдел маркетинга или сделаем универсально эту функцию?.. Но это скорее должно быть указано как // TODO

Вспоминаю за 15 лет работы в 1с на крупных проектах в том числе мешали ли мне когда либо комментарии в коде? Нет..
Мешало ли мне когда-нибудь недостаток комментариев что бы разобраться в сложном алгоритме в котором полно бизнес-специфики? Да.
dima_home; biimmap; ardn; user1881120; +4 Ответить
121. пользователь 09.01.23 18:29
Сообщение было скрыто модератором.
...
123. пользователь 09.01.23 21:24
Сообщение было скрыто модератором.
...
125. AlexCherdakov 20 10.01.23 05:53 Сейчас в теме
Есть ли у автора классическое профильное образование? Необходимость комментариев осознается в первые пять лет обучения а последующие 20 лет опыта только подтверждается. Обсуждаемым вижу только конкретное их применение в конкретной среде разработки. Что либо обсуждать с человеком отрицающим их необходимость не вижу смысла, зачем обсуждать необходимость шипованной резины с жителем ЮАР.
126. rpgshnik 3660 10.01.23 09:57 Сейчас в теме
Ой, Хайпажор!)))

Это очередной холивар о Чистом коде :)

От себя добавлю, что один раз открыл модуль, начал скролить его изучать и в конце меня ждала награда, голая девушка во весь рост :))) рисунок символами девушки уже тот найти не смог быстро, нашел кусочек.

Конечно это меня позабавило и я какое-то время оставлял таких же своих Котеек :) у меня даже шаблоны с ними остались.
Прикрепленные файлы:
EvgeniyOlxovskiy; dima_home; maksa2005; biimmap; sapervodichka; AllexSoft; ardn; +7 Ответить
145. maksa2005 536 11.01.23 12:33 Сейчас в теме
127. nyam-nyam 10.01.23 10:05 Сейчас в теме
А клиентам Вы код в качестве готового продукта выдаёте или прям в Git учётку создаёте? Они то тоже могут захотеть посмотреть код, да и вообще перейти к другому подрядчику, которому надо будет разбираться в Вашем коде. Или проблемы индейцев шерифа не волнуют?
unknown181538; user1559729; dima_home; Lirina26; kholkin; cdiamond; Stels; biimmap; n2m3m; rpgshnik; user1881120; +11 Ответить
139. biimmap 1919 10.01.23 23:19 Сейчас в теме
(127) Это прям один из лучших доводов за использование комментариев в коде
dima_home; +1 Ответить
136. sapervodichka 6827 10.01.23 11:41 Сейчас в теме
(129) 1-ый программист свой убогий код оптимизирует в Твоей базе, только если Ты лично об этом куске кода будешь знать и проконтролируешь его оптимизацию, а иначе по своей воле он к нему не вернется никогда
142. cdiamond 235 11.01.23 10:46 Сейчас в теме
Когда правишь типовые конфиги, и когда их штук 30 и когда это делают еще одновременно 5 франчей, то оставлять метку что это сделал я считаю обязательным. Никакой GIT тут не поможет. Потом спустя полгода невозможно вспомнить где что делал, поэтому глобальным поиском по своей фамилии раз - сразу нахожу весь свой гонокод.
Lirina26; user1881120; biimmap; kholkin; AllexSoft; +5 Ответить
150. stepan96 72 11.01.23 23:31 Сейчас в теме
Холивар по поводу комментов напоминает мне картинку:
Прикрепленные файлы:
EvgeniyOlxovskiy; +1 Ответить
152. lada2011 12.01.23 11:24 Сейчас в теме
Господа, вы наверное не застали время платформ 8.1 и 8.2 , когда еще не было расширений. А теперь попробуйте обновить переписанный УПП без комментариев и восстановить изменения в модуле, если при сохранении конфигурации потеряли предыдущие изменения. А я делаю так, все изменения в конфигураторе помечаю словом "старт", окончание "финиш", а потом глобальным поиском в копии базы нахожу все изменения и добавляю их в обновленную конфигурацию.
Основная задача комментария - не вспоминать через несколько лет для чего меняли, добавляли код.
dima_home; biimmap; +2 Ответить
154. dima_home 241 12.01.23 18:23 Сейчас в теме
(152) Как раз сегодня это делал... только комментарии //++ //-- и спасали.
Сразу понятно в момент сравнения модулей - это 1С изменила модуль в обновлении, или это наши изменения.
156. unknown181538 156 12.01.23 19:46 Сейчас в теме
(152) Эм. Таким способом сложное не обновишь. Нужно сравнивать с конфигурацией поставщика, и будет счастье.
160. dima_home 241 17.01.23 12:43 Сейчас в теме
(156)
Таким способом сложное не обновишь.

Правила Парето.
В УПП 80% исправлений, которые нужно перенести при очередном обновлении, являются несложные правками (или правками блоками), и наличие "обрамляющих" комментариев снижает время обновления до 20%.
Ну и само собой - есть такие изменения, которые очень сложно переносить и мы делаем все, что бы вынести эти изменения в отдельные блоки с минимальным остатком изменения кода в типовых модулях.

Вот например: Программное управление обычными формами
153. morin 58 12.01.23 12:24 Сейчас в теме
Думаю, в EDT легко своять кнопку, которая сможет скрывать, отображать комментарии. И тогда, чтобы бегло смотреть на код, можно отключить комментарии, и включить обратно когда это необходимо.

Я за комментарии. Но важно понимать, что комментарии как и всё в нашей жизни устаревают, и то, что было полезно во время интенсивной разработки или экстренного латания дыр, со временем превращается в те самые говенные комментарии со ссылками на всяких там уволившихся Вась, Петь.
EvgeniyOlxovskiy; +1 Ответить
155. dima_home 241 12.01.23 18:41 Сейчас в теме
(153)
в те самые говенные комментарии

Это не комментарии "говенные", это те, "ворочающие нос от комментариев", программисты "говенные", которые внесли изменяя в код и не позаботились внести изменения в комментарий.

ps // Если бы у меня в службе сотрудник заявил: "мне не нужны комментарии, так как мой код сам за себя говорит", то я этого сотрудника с удовольствием отправлю в бесконечный неоплачиваемый отпуск, в котором он сможет бесконечно обучать других и писать статьи на инфостарте о вреде комментирования кода.
ildary; biimmap; +2 1 Ответить
158. morin 58 13.01.23 08:58 Сейчас в теме
(155) Согласен с вами полностью. Комментарии - это неотъемлемая часть кода, и их нужно поддерживать в актуальном состоянии.
157. user1559729 12.01.23 19:57 Сейчас в теме
(153)
Думаю, в EDT легко своять кнопку, которая сможет скрывать, отображать комментарии. И тогда, чтобы бегло смотреть на код, можно отключить комментарии, и включить обратно когда это необходимо.

Интересное предложение.
159. karpik666 3786 15.01.23 11:54 Сейчас в теме
Добавлю свои 5-копеек, лично мое отношение к комментарием:
1. Указание автора кода и номера задачи - однозначно нужны, даже если используется GIT, просто это тупо удобно, тебе не нужно лезть в другую систему и искать коммит, по этой задаче, ты просто вбиваешь в поиск номер задачи в клиенте GIT и тебе отобразятся все коммиты. Правда не нужно при этом захламлять код старыми комментариями, их можно смело удалять, если добавил по своей в истории модуля потом можно обратно получить номера задач, blame не сильно удобен, так как код могли тупо перенести в другое место и тогда авторство сменится.
Это для тех случаев, когда работаешь с конфигуратором, если пишешь код напрямую в Visual Studio Code, то там можно и не ставить, так как при подключенном расширении git, коммит сразу отображается в тексте модуля.
2. Сохранение чужого (старого) кода - нет, так как реально вносится только путаницу, в крайнем случае, если дорабатывался типовой модуль, и вносились небольшие правки, то можно отметить комментарием, что код полностью за исключением указанных мест.
3. Пояснение того, что делает код - да, но без фанатизма, если из наименования функций итак понятно, то добавлять не нужно, а вот пояснение для чего конкретно потребовалась доработка этого модуля или процедуры или функции, и то, что не описано в изначальной задаче, я считаю нужно добавить, если это упростит поддержку решения.
4. Отражение событий в мире и организации - да, если у коллег такое же чувство юмора, как и у тебя, это может позабавить, когда читаешь чужой код, ничего страшного в этом нет.

ну и конечно же основная проблема комментариев, это поддержка их в актуальном состоянии.
dima_home; biimmap; ardn; +3 Ответить
164. zurapa 24.01.23 07:55 Сейчас в теме
Есть такая штука, как Trac. В ней можно даже вот такие идеи с номером задачи и авторством и социальным контекстом написания кода вынести из самого кода и читать это в привязке к статьям и задачам, где так же можно вкраплять куски кода определённой версии, тем самым создавая исторический слепок происходящего. Не нужно занимать конфигуратор.
Однако правила для того, чтобы их нарушать. Эта игра в комментарии или системы ведения заявок в основном плодят, чтобы было. Итогом, всё равно все колбасят, как им хочется.
Формально, у программиста рядового нет выбора. Он должен следовать регламенту, даже если он дебильный. Управленцы решают, как организовать работу. Разбор всех этих коллизий, лишних действий - проблема управленца. Пожалуйста сосредоточтесь на коде и не пишите портяночно-простынного дерьма трудночитаемого и не ленитесь осмысленно называть переменные и функции. Подумать о расширяемости и дорабатываемости вашего кода я даже не прошу. Так в корпорациях работать не принято.

Это был маленький опыт экспрессия на тему того, как я это видел на своём личном опыте.
165. muskul 04.02.23 06:23 Сейчас в теме
Всего то нужно было бы микро плагин который скрывал бы // и все что дальше по строчке......
Оставьте свое сообщение