Обновить
Мой ответ в цитатах для акцента:
Я считаю, что ответ, который гласит, что комментарии не должны рассматриваться в стандартах кодирования, а затем перечисляет ряд защитных вопросов для борьбы с ним, является единственным правильным ответом.
Проблема здесь в том, что Стандарт кодирования - это просто Стандарт . Чрезвычайно субъективные идеи не должны быть в стандарте кодирования . Это может быть руководство по передовому опыту, но это руководство нельзя использовать против разработчика во время проверки кода. По моему личному мнению, Стандарт Кодирования должен быть как можно ближе к Автоматизированному. В обзорах кода тратится столько времени на обсуждение имен, пробелов, вкладок, скобок, комментариев и т. Д. И т. Д., Когда ВСЕ это можно автоматизировать. Даже ответ о tables
и chairs
может быть автоматизирован. LINT'ers позволяют использовать словари, проверки на заглавные буквы в зависимости от концепции (переменная, функция, метод, класс и т. Д.).
Даже проверка JavaDoc может быть осуществлена роботом LINT'er до принятия запроса на извлечение. Многие Open Source проекты делают именно это. Вы отправляете запрос на извлечение, код строится из файла Travis-CI, включая статический анализ, и он должен пройти все стандарты кодирования, которые могут быть объективно выражены. Никто не говорит о том, что «делать это неправильно» или «не предоставлять значение» с комментариями, или о неправильном способе именования переменных, и др. Эти обсуждения не приносят никакой пользы, и их лучше оставить стороннему роботу, который может взять на себя всю тяжесть нашего эмоционального кодирования.
Чтобы на самом деле ответить на вопрос, нам нужно было бы решить, как написать стандарт, в котором указано, как ответить на следующий вопрос: был ли этот комментарий полезен? Стандарт кодирования не может диктовать «значение» комментария. Поэтому человеку необходимо пройти этот контрольный список. Простое упоминание комментариев в стандарте кодирования создает контрольный список, которого Оригинальный плакат хочет избежать.
Поэтому комментарии обычно не обрабатываются компилятором и не удаляются. Их ценность не может быть определена. Является ли рассматриваемый комментарий ценным; Да или нет?. Отвечать на этот вопрос сложно. Только люди имеют шанс правильно ответить на него, и даже тогда он может ответить только в тот момент, когда он прочитан, тем, кто его читает; где на ценность этого комментария влияют погода, его или ее домашняя жизнь, последняя встреча, на которой они только что побывали и которая не закончилась, время суток, количество кофе, которое они выпили. Я верю, что картина становится более ясной.
Как это может когда-либо быть должным образом выражено в каком-либо стандарте? Стандарт бесполезен, если его нельзя применять последовательно и справедливо, где справедливость больше касается объективности, а не эмоций.
Я оспариваю, что Стандарт кодирования должен оставаться максимально объективным. То, как переменные называются IS цель. Их можно легко проверить по словарю на предмет правильного написания, грамматической структуры и корпуса. Все, кроме этого, является «спичкой», которую выигрывает человек с наибольшей силой или «бьющий лоб». Что-то я лично борюсь с НЕ делаю.
Когда я комментирую, я всегда комментирую разговор с моим будущим я в третьем лице. Если я вернусь к этому коду через 5 лет, что мне нужно знать? Что было бы полезно, что могло бы сбить с толку, и что было бы устаревшим с кодом? Существует различие между документированием кода для генерации общедоступного API с возможностью поиска и комментарием, который предоставляет ценность неизвестной третьей стороне, даже если эта третья сторона принадлежит вам.
Вот хороший лакмусовый тест. Если бы вы были ЕДИНСТВЕННЫМ в проекте. Вы знали, что будете единственным в проекте. Что будет в вашем стандарте кодирования? Вы хотите, чтобы ваш код был чистым, понятным и понятным для себя в будущем. Хотели бы вы иметь обзор кода с собой о том, почему вы не поместили комментарий в каждой строке? Будете ли вы просматривать каждый комментарий, который вы создали для 100 файлов, которые вы зарегистрировали? Если нет, то зачем заставлять других?
Что-то, что я считаю упущенным в этих дискуссиях, это то, что Future You также является разработчиком этого проекта. Отвечая на вопрос о ценности, завтра вы также человек, который может извлечь пользу из комментария. Так что размер команды, на мой взгляд, не имеет значения. Опыт команды не имеет значения, он меняется слишком часто.
Никакой объем кода комментария, проверяющего это, не мешает кардиостимулятору сбить и убить пациента. Когда вы говорите о комментарии, который влияет на код, вы теперь говорите о коде, а не о комментарии. Если все, что нужно, это отсутствующий комментарий, чтобы убить кого-то, то в этом процессе пахнет чем-то еще.
Решение этого типа строгого способа кодирования уже было предложено в качестве методологии для написания самого программного обеспечения. И это не имеет ничего общего с комментариями. Проблема с комментариями заключается в том, что они НЕ влияют на то, как продукт в конечном итоге работает. Лучшие комментарии в мире не могут препятствовать сбою программного обеспечения, если оно встроено в стимулятор. Или при измерении электрических сигналов с помощью портативного ЭКГ.
У нас есть два типа комментариев:
Машиносчитываемые комментарии
Стили комментариев, такие как Javadoc, JSDoc, Doxygen и т. Д., - все это способы комментирования открытого интерфейса, предоставляемого набором кода. Этот интерфейс может использоваться только одним другим разработчиком (проприетарный код для команды из двух человек), неизвестным числом разработчиков (например, JMS) или для всего отдела. Этот код может быть прочитан автоматизированным процессом, который затем производит другой способ чтения этих комментариев, например HTML, PDF и тому подобное.
Этот тип комментариев легко создать стандарт для. Это становится объективным процессом обеспечения того, чтобы каждый публично вызываемый метод, функция, класс содержал необходимые комментарии. Заголовки, параметры, описание и др. эл. Это сделано для того, чтобы другой команде было легко найти и использовать код.
Я делаю то, что выглядит сумасшедшим, но на самом деле это не
Эти комментарии здесь, чтобы помочь другим увидеть, ПОЧЕМУ этот код был написан определенным образом. Возможно, в процессорах, на которых выполняется код, есть числовая ошибка, и она всегда округляется, но разработчики обычно имеют дело с кодом, который округляется. Итак, мы комментируем, чтобы разработчик, касающийся кода, понимал, почему текущий контекст что-то делает, как правило, кажется неразумным, но на самом деле это было написано специально.
Этот тип кода является причиной многих проблем. Обычно он не комментируется, а позже обнаруживается новым разработчиком и исправляется. Таким образом, ломая все. Даже тогда, комментарии только там, чтобы объяснить ПОЧЕМУ, чтобы фактически не препятствовать чему-либо сломаться.
На комментарии нельзя положиться
Комментарии в конечном итоге бесполезны и им нельзя доверять. Комментарии обычно не изменяют способ работы программ. И если они это сделают, то ваш процесс вызывает больше проблем, чем следует. Комментарии - это запоздалая мысль, и никогда не может быть ничего, кроме. Код - это все, что имеет значение, поскольку это все, что обрабатывается компьютером.
Это может звучать глупо, но терпите меня. Какая из этих двух строк действительно имеет значение?
// We don't divide by 0 in order to stop crashes.
return 1 / n;
В этом примере все, что имеет значение, - это то, что мы понятия не имеем, что такое «n», нет проверки на то, что n равно 0, и даже если бы оно было, ничто не мешает разработчику n = 0
ПОСЛЕ проверки после 0. После этого комментарий бесполезен, и ничто автоматизированное не может поймать это. Никакой стандарт не может это поймать. Комментарий, хотя довольно (для некоторых) не имеет никакого отношения к результату продукта.
Разработка через тестирование
Что влияет на продукт? Отрасли, в которых написанный код может буквально спасти или убить кого-то, должны быть тщательно проверены. Это делается с помощью обзоров кода, обзоров кода, тестирования, тестирования, обзоров кода, модульных тестов, интеграционных тестов, испытаний, промежуточных этапов, месяцев тестирования, проверок кода и одиночных испытаний, промежуточных этапов, анализа кода, тестирования, а затем, возможно, наконец собирается в производство. Комментарии не имеют ничего общего с этим.
Я предпочел бы код, который не имел комментариев, имел спецификацию, имел модульные тесты, которые проверяли спецификацию, изучал результаты выполнения кода на производственном устройстве, а затем хорошо документированный код, который никогда не тестировался, и не имел ничего для сравнения. код против.
Документация хороша, когда вы пытаетесь понять, ПОЧЕМУ кто-то сделал что-то определенным образом, однако, я обнаружил, что за эти годы документация обычно используется для объяснения, почему было сделано что-то «умное», когда это действительно не нужно быть написанным таким образом.
Заключение
Если вы работаете в компании, которой ТРЕБУЕТСЯ комментировать каждую строку, Я ГАРАНТИРУЮ, по крайней мере, два программиста проекта уже написали программу автоматического документирования на Perl, Lisp или Python, которая определяет общее представление о том, что делает строка. , а затем добавляет комментарий над этой строкой. Поскольку это возможно, это означает, что комментарии бесполезны. Найдите инженеров, которые написали эти сценарии для автоматического документирования кода, и используйте их в качестве доказательства того, почему «Комментарий к каждой строке» тратит время, не приносит никакой пользы и потенциально причиняет вред.
Кроме того, я помогал близкому другу с заданием по программированию. Его учитель поставил требование, чтобы каждая строка была документирована. Так что я вижу, откуда взялся этот мыслительный процесс. Просто спросите себя, что вы пытаетесь сделать, и это правильно? Тогда спросите себя; Есть ли способ «сыграть» систему с этим процессом? Если есть, то действительно ли это добавляет ценность? Нельзя автоматически писать модульные тесты, которые проверяют, что код соответствует определенной спецификации, и если бы они могли, это не было бы плохо.
Если устройство должно работать в определенных условиях, потому что оно будет находиться внутри человека, единственный способ гарантировать, что оно не убьет их, - это годы испытаний, экспертных проверок, испытаний, а затем НИКОГДА не изменяйте код снова. Вот почему НАСА до сих пор использует такое старое оборудование и программное обеспечение. Когда дело доходит до жизни или смерти, вы не просто «вносите небольшие изменения и регистрируете это».
Комментарии не имеют никакого отношения к спасению жизней. Комментарии для людей, люди делают ошибки, даже когда пишут комментарии. Не верь людям. Ergo, не верь комментариям. Комментарии не ваше решение.