Как написать код без "необходимости" комментариев для чтения?

Возможный дубликат:
Можно ли написать хороший и понятный код без комментариев?

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

Java Mootools Рубин Erlang

Любые советы будут оценены? Благодаря

Ответ 1

Я не думаю, что вы можете писать код без комментариев.

Вкратце, код документирует как. В комментариях говорится, почему.

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

Ответ 2

Рекомендуемое чтение: Чистый код Роберта К. Мартина.

Вкратце, вы должны

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

Не бойтесь извлечь даже умеренно сложные выражения из операторов if; который яснее читать, это

if (i >= 0 && (v.size() < u || d == e)) ...

или

if (foundNewLocalMaximum()) ...

(Не пытайтесь найти какой-либо смысл в первом фрагменте кода, я просто сделал это: -)

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

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

Другая причина, по которой я думаю, что "почему я выбрал это решение", чаще всего не стоит документировать в коде, заключается в том, что краткая версия такого комментария почти всегда будет выглядеть как "потому что я думаю, что это лучший способ" или ссылку на, например, "Язык программирования С++, глава 5.2.1" и длинная версия будут трехстраничным эссе. Я думаю, что опытный программист чаще всего видит и понимает, почему код написан так без особого объяснения, и новичок может не понимать даже самого объяснения - не стоит пытаться охватить всех.

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

Ответ 3

Комментарии по коду должны сообщать вам, почему вы изначально сделали что-то определенным образом. Это не должно означать, что код слишком сложно понять.

Ответ 4

Наиболее важные вещи, которые следует соблюдать:

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

Ответ 5

Я думаю, что полезно писать комментарии для ПОЛЬЗОВАТЕЛЕЙ вашего кода - что делают классы/методы/функции, когда их называть и т.д. Другими словами, документируйте API.

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

Ответ 6

Я лично считаю, что никаких комментариев вообще не так плохо, как с чрезмерным комментарием. Вам просто нужно найти правильный баланс. Об использовании длинных описательных имен для вещей, это о суммировании для меня: прочитать это Также читайте Kernighan и Pike на длинных именах.

Ответ 7

Вам нужно следовать определенным правилам.

  • Дайте объектам (переменным, классам и т.д.) читаемым и значимым именам.
  • Широко используйте шаблоны проектирования и назовите их соответствующим образом, например. если это Factory имя FooFactory.
  • Правильно ли отформатирован код и т.д.