HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#Руководства</a></p>
1 <p><a>#Руководства</a></p>
2 <ul><li>30 сен 2019</li>
2 <ul><li>30 сен 2019</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Рано или поздно в жизни каждого разработчика наступает момент, когда он не понимает, как работает его код. Выясняем, что с этим делать.</p>
4 </ul><p>Рано или поздно в жизни каждого разработчика наступает момент, когда он не понимает, как работает его код. Выясняем, что с этим делать.</p>
5 <p> vlada_maestro / shutterstock</p>
5 <p> vlada_maestro / shutterstock</p>
6 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
6 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
7 <p>Программисты часто сталкиваются с тем, что не могут прочитать код. Такое случается постоянно: когда только приходят в новый проект, когда проверяют код коллеги или - так бывает чаще всего - когда смотрят результат своей же работы. Чтобы этого избежать, нужно писать и читать документацию.</p>
7 <p>Программисты часто сталкиваются с тем, что не могут прочитать код. Такое случается постоянно: когда только приходят в новый проект, когда проверяют код коллеги или - так бывает чаще всего - когда смотрят результат своей же работы. Чтобы этого избежать, нужно писать и читать документацию.</p>
8 <p><strong>Содержание</strong></p>
8 <p><strong>Содержание</strong></p>
9 <ul><li><a>Два вида документации</a></li>
9 <ul><li><a>Два вида документации</a></li>
10 <li><a>Правила хорошего тона в составлении документации</a></li>
10 <li><a>Правила хорошего тона в составлении документации</a></li>
11 <li><a>Где писать документацию в C#</a></li>
11 <li><a>Где писать документацию в C#</a></li>
12 <li><a>Как создать файл документации</a></li>
12 <li><a>Как создать файл документации</a></li>
13 <li><a>Заключение</a></li>
13 <li><a>Заключение</a></li>
14 </ul><p>Разработчики имеют дело с двумя основными видами документации:</p>
14 </ul><p>Разработчики имеют дело с двумя основными видами документации:</p>
15 <ol><li><strong>Пользовательская документация</strong>. Это руководство по эксплуатации программ. Обычно оно нужно для сложных профессиональных инструментов. Если же пользователи не могут сами разобраться в приложении пиццерии, то лучше доработать интерфейс - добровольно никто инструкцию читать не станет.</li>
15 <ol><li><strong>Пользовательская документация</strong>. Это руководство по эксплуатации программ. Обычно оно нужно для сложных профессиональных инструментов. Если же пользователи не могут сами разобраться в приложении пиццерии, то лучше доработать интерфейс - добровольно никто инструкцию читать не станет.</li>
16 <li><strong>Техническая документация</strong>. Это пояснения для программистов, которые будут использовать или дорабатывать существующий код. Они помогут быстро вникнуть в проект и начать работать. Или же продолжить писать программу после долгого перерыва.</li>
16 <li><strong>Техническая документация</strong>. Это пояснения для программистов, которые будут использовать или дорабатывать существующий код. Они помогут быстро вникнуть в проект и начать работать. Или же продолжить писать программу после долгого перерыва.</li>
17 </ol><p>К сожалению, не все разработчики (практически никто) любят читать документацию. Любителей писать её и того меньше. Однако делать это очень важно, потому что сложно поддерживать проект без документации.</p>
17 </ol><p>К сожалению, не все разработчики (практически никто) любят читать документацию. Любителей писать её и того меньше. Однако делать это очень важно, потому что сложно поддерживать проект без документации.</p>
18 <p>Составляя документацию, стоит следовать определенным правилам - они помогают сделать ее более понятной.</p>
18 <p>Составляя документацию, стоит следовать определенным правилам - они помогают сделать ее более понятной.</p>
19 <p><strong>1. Документация нужна не всегда</strong></p>
19 <p><strong>1. Документация нужна не всегда</strong></p>
20 <p>Если программа одноразовая, не стоит тратить время на написание пояснений. Например, если нужен небольшой скрипт, который будет написан за пять минут и использован 1-2 раза.</p>
20 <p>Если программа одноразовая, не стоит тратить время на написание пояснений. Например, если нужен небольшой скрипт, который будет написан за пять минут и использован 1-2 раза.</p>
21 <p><strong>2. Документация нужна не везде</strong></p>
21 <p><strong>2. Документация нужна не везде</strong></p>
22 <p>Также не нужно писать пояснения ко всему. Если код написан хорошо, то по названиям уже будет понятно, что это такое и зачем оно используется. Например, легко догадаться, что метод<em>int Sum (int a, int b)</em>возвращает результат сложения двух чисел.</p>
22 <p>Также не нужно писать пояснения ко всему. Если код написан хорошо, то по названиям уже будет понятно, что это такое и зачем оно используется. Например, легко догадаться, что метод<em>int Sum (int a, int b)</em>возвращает результат сложения двух чисел.</p>
23 <p>Исключение можно сделать, если речь идет об API или фреймворке, которыми пользуются многие разработчики: они не всегда видят исходный код, но могут использовать классы и методы. Поэтому им важно иметь список доступных методов. В этом случае задокументировать всё нужно просто для галочки.</p>
23 <p>Исключение можно сделать, если речь идет об API или фреймворке, которыми пользуются многие разработчики: они не всегда видят исходный код, но могут использовать классы и методы. Поэтому им важно иметь список доступных методов. В этом случае задокументировать всё нужно просто для галочки.</p>
24 <p><strong>3. Документация должна быть точной</strong></p>
24 <p><strong>3. Документация должна быть точной</strong></p>
25 <p>Очень важно уметь ясно выражать свои мысли. Нужно предельно точно описывать, что делает тот или иной фрагмент кода. Для этого стоит давать как можно более короткие определения. Например:</p>
25 <p>Очень важно уметь ясно выражать свои мысли. Нужно предельно точно описывать, что делает тот или иной фрагмент кода. Для этого стоит давать как можно более короткие определения. Например:</p>
26 /// &lt;summary&gt; /// Сообщение в чате. /// &lt;/summary&gt; class Message { … /// &lt;summary&gt; /// Текст сообщения. /// &lt;/summary&gt; public string Text { get { return this.text; } } }<p>В этом фрагменте кода объем документации к классу и его свойству не превышает одного предложения. Этого достаточно, чтобы было понятно, что это такое и для чего его нужно использовать.</p>
26 /// &lt;summary&gt; /// Сообщение в чате. /// &lt;/summary&gt; class Message { … /// &lt;summary&gt; /// Текст сообщения. /// &lt;/summary&gt; public string Text { get { return this.text; } } }<p>В этом фрагменте кода объем документации к классу и его свойству не превышает одного предложения. Этого достаточно, чтобы было понятно, что это такое и для чего его нужно использовать.</p>
27 <p><strong>4. Документация должна быть сухой</strong></p>
27 <p><strong>4. Документация должна быть сухой</strong></p>
28 <p>Хотя канцеляризмов нужно избегать, писать надо максимально сухо и по делу. Никаких стихов, метафор, аналогий или шуток - всё это может быть забавным, но не добавляет ясности.</p>
28 <p>Хотя канцеляризмов нужно избегать, писать надо максимально сухо и по делу. Никаких стихов, метафор, аналогий или шуток - всё это может быть забавным, но не добавляет ясности.</p>
29 <p><strong>5. В документации не должно быть старого кода</strong></p>
29 <p><strong>5. В документации не должно быть старого кода</strong></p>
30 <p>Этот правило больше касается обычных комментариев, чем самой документации. Однако оно очень важное, поэтому приведено здесь.</p>
30 <p>Этот правило больше касается обычных комментариев, чем самой документации. Однако оно очень важное, поэтому приведено здесь.</p>
31 <p>Никогда не храните в коде старые методы и операторы, даже если они задокументированы. Если что-то не используется в текущий момент - это мусор, от которого нужно избавиться.</p>
31 <p>Никогда не храните в коде старые методы и операторы, даже если они задокументированы. Если что-то не используется в текущий момент - это мусор, от которого нужно избавиться.</p>
32 <p>Если есть сомнения пригодится ли еще этот код, его лучше сохранить в системе контроля версий - именно для этого ее и придумали.</p>
32 <p>Если есть сомнения пригодится ли еще этот код, его лучше сохранить в системе контроля версий - именно для этого ее и придумали.</p>
33 <p>Дальше речь пойдет о том, как писать техническую документацию для программ на C#. Вся работа будет вестись в Visual Studio.</p>
33 <p>Дальше речь пойдет о том, как писать техническую документацию для программ на C#. Вся работа будет вестись в Visual Studio.</p>
34 <p>Вариантов много. Например, можно сделать это в Word или Google Docs, тогда разработчики смогут скачивать файл из интернета. Некоторые хранят инструкции в печатном виде, но это плохой вариант, потому что документация быстро устаревает.</p>
34 <p>Вариантов много. Например, можно сделать это в Word или Google Docs, тогда разработчики смогут скачивать файл из интернета. Некоторые хранят инструкции в печатном виде, но это плохой вариант, потому что документация быстро устаревает.</p>
35 <p>Лучший способ - писать всё прямо в коде программы. Тогда у каждого разработчика будет доступ к документации в любое время. Самый примитивный вариант - использовать комментарии.</p>
35 <p>Лучший способ - писать всё прямо в коде программы. Тогда у каждого разработчика будет доступ к документации в любое время. Самый примитивный вариант - использовать комментарии.</p>
36 <p>В C# есть два вида комментариев. Однострочные:</p>
36 <p>В C# есть два вида комментариев. Однострочные:</p>
37 int a = 11 + 12; //Это однострочный комментарий<p>И многострочные:</p>
37 int a = 11 + 12; //Это однострочный комментарий<p>И многострочные:</p>
38 /* Начало комментария Это Многострочный Комментарий Конец комментария */<p>Компилятор во время сборки игнорирует комментарии и просто вырезает их, поэтому на работу программы они не влияют.</p>
38 /* Начало комментария Это Многострочный Комментарий Конец комментария */<p>Компилятор во время сборки игнорирует комментарии и просто вырезает их, поэтому на работу программы они не влияют.</p>
39 <p>Более продвинутый вариант - использовать XML. Чтобы вставить XML-комментарий, нужно перед названием класса, поля, свойства или метода поставить тройной слеш.</p>
39 <p>Более продвинутый вариант - использовать XML. Чтобы вставить XML-комментарий, нужно перед названием класса, поля, свойства или метода поставить тройной слеш.</p>
40 <p>После этого автоматически будет создано два элемента:</p>
40 <p>После этого автоматически будет создано два элемента:</p>
41 <ol><li><strong>Summary</strong> - общий комментарий. В нем пишут, что делает метод или для чего нужен класс.</li>
41 <ol><li><strong>Summary</strong> - общий комментарий. В нем пишут, что делает метод или для чего нужен класс.</li>
42 <li><strong>Param</strong> - комментарий об аргументе. В нем указывается, какое значение надо передать.</li>
42 <li><strong>Param</strong> - комментарий об аргументе. В нем указывается, какое значение надо передать.</li>
43 </ol><p>Практически все инструменты, в том числе и Visual Studio, поддерживают вывод подсказок, которые подгружаются из документации. И теперь, если навести на метод<em>Main ()</em>или его аргумент, то можно увидеть, что было написано в комментарии.</p>
43 </ol><p>Практически все инструменты, в том числе и Visual Studio, поддерживают вывод подсказок, которые подгружаются из документации. И теперь, если навести на метод<em>Main ()</em>или его аргумент, то можно увидеть, что было написано в комментарии.</p>
44 <p>Такой способ намного лучше, потому что человеку вообще не нужно ничего открывать, чтобы определить, что делает какой-нибудь фрагмент кода. Конечно, наличие XML создает визуальный шум, но его можно просто скрыть.</p>
44 <p>Такой способ намного лучше, потому что человеку вообще не нужно ничего открывать, чтобы определить, что делает какой-нибудь фрагмент кода. Конечно, наличие XML создает визуальный шум, но его можно просто скрыть.</p>
45 <p>Еще можно использовать такие XML-элементы, как:</p>
45 <p>Еще можно использовать такие XML-элементы, как:</p>
46 <ul><li><strong>Returns</strong> - возвращаемое значение;</li>
46 <ul><li><strong>Returns</strong> - возвращаемое значение;</li>
47 <li><strong>Value</strong> - значение свойства;</li>
47 <li><strong>Value</strong> - значение свойства;</li>
48 <li><strong>Exception</strong> - исключение;</li>
48 <li><strong>Exception</strong> - исключение;</li>
49 <li><strong>Remarks</strong> - ремарка к основному комментарию.</li>
49 <li><strong>Remarks</strong> - ремарка к основному комментарию.</li>
50 </ul><p>Таких элементов очень много, подробнее почитать о них можно в <a>документации Microsoft</a>. Цель же этой статьи - показать, как документировать код, чтобы разбираться в проекте стало легче, а не сложнее.</p>
50 </ul><p>Таких элементов очень много, подробнее почитать о них можно в <a>документации Microsoft</a>. Цель же этой статьи - показать, как документировать код, чтобы разбираться в проекте стало легче, а не сложнее.</p>
51 <p>Иногда все-таки нужно сохранить документацию вне кода. Чаще всего ее сохраняют в HTML-формате, а потом загружают на сайт, чтобы разработчики имели к ней доступ.</p>
51 <p>Иногда все-таки нужно сохранить документацию вне кода. Чаще всего ее сохраняют в HTML-формате, а потом загружают на сайт, чтобы разработчики имели к ней доступ.</p>
52 <p>Для этого сначала нужно зайти в настройки проекта:</p>
52 <p>Для этого сначала нужно зайти в настройки проекта:</p>
53 <p>А потом перейти во вкладку<em>Build</em>и поставить галочку<em>XML documentation file</em>:</p>
53 <p>А потом перейти во вкладку<em>Build</em>и поставить галочку<em>XML documentation file</em>:</p>
54 <p>Теперь вместе с компиляцией программы будет создаваться файл с документацией в формате XML. Его можно преобразовать в HTML с помощью специальных утилит. Microsoft для этого рекомендует использовать<a>DocFX</a>или<a>Sandcastle</a>.</p>
54 <p>Теперь вместе с компиляцией программы будет создаваться файл с документацией в формате XML. Его можно преобразовать в HTML с помощью специальных утилит. Microsoft для этого рекомендует использовать<a>DocFX</a>или<a>Sandcastle</a>.</p>
55 <p>Рассмотрим на примере DocFX. Его можно скачать с помощью NuGet Package Manager в Visual Studio. Для этого нажмите на проект правой кнопкой мыши и выберите пункт<em>Manage NuGet Packages</em>:</p>
55 <p>Рассмотрим на примере DocFX. Его можно скачать с помощью NuGet Package Manager в Visual Studio. Для этого нажмите на проект правой кнопкой мыши и выберите пункт<em>Manage NuGet Packages</em>:</p>
56 <p>Затем перейдите во вкладку<em>Browse</em>и введите в поле поиска название<em>docfx.console</em>, а потом нажмите<em>Install</em>:</p>
56 <p>Затем перейдите во вкладку<em>Browse</em>и введите в поле поиска название<em>docfx.console</em>, а потом нажмите<em>Install</em>:</p>
57 <p>После нужно подтвердить установку и согласиться с условиями лицензионного соглашения.</p>
57 <p>После нужно подтвердить установку и согласиться с условиями лицензионного соглашения.</p>
58 <p>Теперь при сборке проекта будет создаваться папка<em>_site</em>, в которой находится сайт с документацией. Однако это касается класса<em>Program</em>, поэтому чтобы проверить работу DocFX, нужно добавить какой-нибудь класс:</p>
58 <p>Теперь при сборке проекта будет создаваться папка<em>_site</em>, в которой находится сайт с документацией. Однако это касается класса<em>Program</em>, поэтому чтобы проверить работу DocFX, нужно добавить какой-нибудь класс:</p>
59 namespace ConsoleApp1 { /// &lt;summary&gt; /// Класс, который представляет пользователя. /// &lt;/summary&gt; public class User { private string name; /// &lt;summary&gt; /// Конструктор класса. /// &lt;/summary&gt; /// &lt;param name="name"&gt;Имя пользователя.&lt;/param&gt; public User(string name) { this.name = name; } /// &lt;summary&gt; /// Меняет имя пользователя. /// &lt;/summary&gt; /// &lt;param name="name"&gt;Имя пользователя.&lt;/param&gt; public void ChangeName(string name) { this.name = name; } /// &lt;summary&gt; /// Метод для вывода имени пользователя. /// &lt;/summary&gt; /// &lt;returns&gt;Возвращает имя пользователя.&lt;/returns&gt; public string GetName() { return this.name; } } }<p>После компиляции проекта с таким классом можно проверить сайт. Его главная страница будет пуста - она нужна для того, чтобы вкратце описать свою программу. Сама же документация находится по адресу<em>api/index.html</em>.</p>
59 namespace ConsoleApp1 { /// &lt;summary&gt; /// Класс, который представляет пользователя. /// &lt;/summary&gt; public class User { private string name; /// &lt;summary&gt; /// Конструктор класса. /// &lt;/summary&gt; /// &lt;param name="name"&gt;Имя пользователя.&lt;/param&gt; public User(string name) { this.name = name; } /// &lt;summary&gt; /// Меняет имя пользователя. /// &lt;/summary&gt; /// &lt;param name="name"&gt;Имя пользователя.&lt;/param&gt; public void ChangeName(string name) { this.name = name; } /// &lt;summary&gt; /// Метод для вывода имени пользователя. /// &lt;/summary&gt; /// &lt;returns&gt;Возвращает имя пользователя.&lt;/returns&gt; public string GetName() { return this.name; } } }<p>После компиляции проекта с таким классом можно проверить сайт. Его главная страница будет пуста - она нужна для того, чтобы вкратце описать свою программу. Сама же документация находится по адресу<em>api/index.html</em>.</p>
60 <p>Вот как она выглядит:</p>
60 <p>Вот как она выглядит:</p>
61 <p>Многим, и мне в том их числе, гораздо интереснее писать код, а не описывать его. Однако хорошая документация очень важна, если над проектом работает несколько человек или если это API, которым будут пользоваться сторонние программисты.</p>
61 <p>Многим, и мне в том их числе, гораздо интереснее писать код, а не описывать его. Однако хорошая документация очень важна, если над проектом работает несколько человек или если это API, которым будут пользоваться сторонние программисты.</p>
62 <p>Кроме того, хорошая практика разработки - когда сначала пишется документация, а потом создаются классы и методы, которые должны ей соответствовать.</p>
62 <p>Кроме того, хорошая практика разработки - когда сначала пишется документация, а потом создаются классы и методы, которые должны ей соответствовать.</p>
63 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
63 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>