Ось питання, яке я хотів би задати собі, думаючи, чи додати коментар до розділу коду: Що можу передати, що допоможе наступній людині краще зрозуміти загальний намір коду, щоб вони могли оновити, виправити чи розширити його швидше і надійніше?
Іноді правильна відповідь на це запитання полягає в тому, що ви нічого не можете додати до цього моменту в коді, тому що ви вже вибрали імена та конвенції, які роблять наміри настільки ж очевидними, як це може бути. Це означає, що ви написали надійний код самодокументування, і те, що вставлення коментаря там, швидше за все, зашкодить більше, ніж допоможе. (Зауважте, що зайві коментарі можуть фактично пошкодити надійність коду з часом, уповільнюючи випадання синхронізації з реальним кодом з часом і тим самим ускладнюючи розшифровку реального наміру.
Однак майже в будь-якій програмі та будь-якою мовою програмування ви зіткнетеся з пунктами, коли певні критичні концепції та рішення, прийняті оригінальним програмістом - ви - більше не будуть помітні в коді. Це в значній мірі неминуче, тому що хороший програміст завжди програмує на майбутнє - тобто не просто змусити програму працювати один раз, а зробити всі її численні майбутні виправлення та версії та розширення та модифікації та порти, і хто знає, що робити також правильно працювати. Цей останній набір цілей набагато складніше і вимагає набагато більше мислення, щоб зробити добре. Дуже важко добре висловитись у більшості комп'ютерних мов, більш орієнтованих на функціональність - тобто на те, щоб сказати, що це робить версію програми потрібно зробити прямо зараз, щоб зробити її задовільною.
Ось простий приклад того, що я маю на увазі. У більшості мов швидкий внутрішній пошук невеликої структури даних матиме достатню складність, що хтось, дивлячись на неї вперше, швидше за все, не відразу визнає, що це таке. Це можливість для гарного коментаря, адже ви можете додати щось про наміри свого коду, що пізніше читач, швидше за все, оцінить як корисний для розшифровки деталей.
І навпаки, в таких мовах, як логіка на основі мови Prolog, вираження пошуку за невеликим списком може бути настільки неймовірно тривіальним та лаконічним, що будь-який коментар, який ви можете додати, був би просто шумом. Отже, гарне коментування обов'язково залежить від контексту. Це включає такі фактори, як сильні сторони мови, якою ви користуєтесь, та загальний контекст програми.
Суть полягає в наступному: Подумайте про майбутнє. Запитайте себе, що є важливим і очевидним для вас, як програма повинна розумітись і змінюватися в майбутньому. [1]
Для тих частин вашого коду, які справді самодокументовані, коментарі просто додають шум і збільшують проблему узгодженості для майбутніх версій. Тому не додайте їх туди.
Але для тих частин вашого коду, де ви прийняли критичне рішення з кількох варіантів, або де сам код є досить складним, що його призначення невідоме, додайте свої спеціальні знання у вигляді коментаря. Хороший коментар у такому випадку - той, який дає змогу майбутньому програмісту знати, що потрібно зберігати однаково, - це, до речі, інваріантне твердження - і що потрібно змінити.
[1] Це виходить за рамки питання коментарів, але це варто піднести: Якщо ви виявите, що у вас є чітке уявлення про те, як міг змінитися ваш код у майбутньому, вам, ймовірно, варто задуматися над тим, щоб просто зробити коментар і вбудувати ці параметри. всередині самого коду, оскільки це майже завжди буде більш надійним способом забезпечити надійність майбутніх версій вашого коду, ніж намагатися використовувати коментарі, щоб направити якусь невідому майбутню людину в правильному напрямку. У той же час ви також хочете уникати надмірної генералізації, оскільки люди, як відомо, погано прогнозують майбутнє, і це включає майбутнє змін програми. Отже, спробуйте визначити та зафіксувати розумні та добре перевірені аспекти майбутнього на всіх рівнях дизайну програми, але не варто '