Вот вопрос , который я хотел бы спросить себя, думая о том , чтобы добавить комментарий в раздел кода: Что я могу передать , что помогло бы следующему человеку понять общее намерение коды лучше, так что они могут обновить, исправить, или продлить его быстрее и надежнее?
Иногда правильный ответ на этот вопрос заключается в том, что вы ничего не можете добавить к этому моменту в коде, потому что вы уже выбрали имена и соглашения, которые делают намерение настолько очевидным, насколько это возможно. Это означает, что вы написали надежный самодокументированный код, и что вставка комментария туда, скорее всего, отвлечет больше, чем поможет. (Обратите внимание, что избыточные комментарии могут на самом деле со временем повредить надежности кода, замедляя несинхронизацию с реальным кодом с течением времени и, таким образом, затрудняя расшифровку реального намерения.
Тем не менее, почти в любой программе и на любом языке программирования вы столкнетесь с моментом, когда определенные критические концепции и решения, принятые вами самим программистом, больше не будут видны в коде. Это в значительной степени неизбежно, потому что хороший программист всегда программирует на будущее, то есть не только для того, чтобы заставить программу работать один раз, но и для того, чтобы все ее будущие исправления, версии, расширения, модификации и порты были известны и кто знает, что делать. также работает правильно. Этот последний набор целей намного сложнее и требует гораздо большего мышления, чтобы преуспеть. Также очень трудно хорошо выразить себя на большинстве компьютерных языков, которые больше сосредоточены на функциональности, то есть на том, что это означает. Версию программы нужно сделать, прямо сейчас, чтобы она была удовлетворительной.
Вот простой пример того, что я имею в виду. В большинстве языков быстрый встроенный поиск небольшой структуры данных будет достаточно сложным, чтобы кто-то, впервые смотрящий на него, скорее всего, не сразу понял, что это такое. Это возможность для хорошего комментария, потому что вы можете добавить кое-что о намерениях вашего кода, что более поздний читатель, скорее всего, сразу же оценит как полезный для расшифровки деталей.
И наоборот, в таких языках, как язык Prolog, основанный на логике, выражение поиска в небольшом списке может быть настолько невероятно тривиальным и лаконичным, что любой добавленный вами комментарий будет просто шумом. Таким образом, хорошее комментирование обязательно зависит от контекста. Это включает в себя такие факторы, как сильные стороны языка, который вы используете, и общий контекст программы.
Суть заключается в следующем: думать о будущем. Спросите себя, что для вас важно и очевидно о том, как программу следует понимать и изменять в будущем. [1]
Для тех частей вашего кода, которые действительно самодокументированы, комментарии просто добавляют шум и увеличивают проблему когерентности для будущих версий. Так что не добавляйте их туда.
Но для тех частей вашего кода, где вы приняли критическое решение из нескольких вариантов или если сам код достаточно сложен, чтобы его назначение было неясным, добавьте свои специальные знания в виде комментария. Хороший комментарий в таком случае - это тот, который позволяет будущему программисту знать, что должно быть неизменным - это, кстати, концепция инвариантного утверждения - и что можно изменить.
[1] Это выходит за рамки вопроса комментариев, но стоит упомянуть: если вы обнаружите, что у вас есть очень четкое представление о том, как ваш код может измениться в будущем, вам, вероятно, следует подумать не только о комментариях и встраивании этих параметров. в самом коде, поскольку это почти всегда будет более надежным способом обеспечения надежности будущих версий вашего кода, чем попытка использовать комментарии, чтобы направить неизвестного будущего человека в правильном направлении. В то же время вы также хотите избежать чрезмерной генерализации, поскольку люди, как известно, плохо предсказывают будущее, и это включает в себя будущее программных изменений. Поэтому постарайтесь определить и охватить разумные и проверенные измерения будущего на всех уровнях разработки программ, но не