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
/// <summary> /// Сообщение в чате. /// </summary> class Message { … /// <summary> /// Текст сообщения. /// </summary> public string Text { get { return this.text; } } }<p>В этом фрагменте кода объем документации к классу и его свойству не превышает одного предложения. Этого достаточно, чтобы было понятно, что это такое и для чего его нужно использовать.</p>
26
/// <summary> /// Сообщение в чате. /// </summary> class Message { … /// <summary> /// Текст сообщения. /// </summary> 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 { /// <summary> /// Класс, который представляет пользователя. /// </summary> public class User { private string name; /// <summary> /// Конструктор класса. /// </summary> /// <param name="name">Имя пользователя.</param> public User(string name) { this.name = name; } /// <summary> /// Меняет имя пользователя. /// </summary> /// <param name="name">Имя пользователя.</param> public void ChangeName(string name) { this.name = name; } /// <summary> /// Метод для вывода имени пользователя. /// </summary> /// <returns>Возвращает имя пользователя.</returns> public string GetName() { return this.name; } } }<p>После компиляции проекта с таким классом можно проверить сайт. Его главная страница будет пуста - она нужна для того, чтобы вкратце описать свою программу. Сама же документация находится по адресу<em>api/index.html</em>.</p>
59
namespace ConsoleApp1 { /// <summary> /// Класс, который представляет пользователя. /// </summary> public class User { private string name; /// <summary> /// Конструктор класса. /// </summary> /// <param name="name">Имя пользователя.</param> public User(string name) { this.name = name; } /// <summary> /// Меняет имя пользователя. /// </summary> /// <param name="name">Имя пользователя.</param> public void ChangeName(string name) { this.name = name; } /// <summary> /// Метод для вывода имени пользователя. /// </summary> /// <returns>Возвращает имя пользователя.</returns> 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>