Содержание

Комментарии (программирование) — Википедия

У этого термина существуют и другие значения, см. Комментарий.

Коммента́рии — пояснения к исходному тексту программы, находящиеся непосредственно внутри комментируемого кода. Синтаксис комментариев определяется языком программирования. С точки зрения компилятора или интерпретатора, комментарии — часть текста программы, не влияющая на её семантику. Комментарии не оказывают никакого влияния на результат компиляции программы или её интерпретацию. Помимо исходных текстов программ, комментарии также применяются в языках разметки и языках описания.

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

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

Комментарии часто используются для временного отключения части кода. В языках C и C++, некоторые рекомендуют использовать с той же целью директивы препроцессора (#if 0#endif).

Однострочные и многострочные комментарии[править | править код]

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

/* */). Некоторые языки позволяют вложение многострочных комментариев, другие — нет.

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

Другой вид комментариев — аннотации — применяется в набросках доказательств правильности программ. Такие комментарии описывают состояние компьютера, когда программа в процессе выполнения достигнет точки, где расположен комментарий. Программа, снабжённая комментариями-аннотациями, называется

аннотированной программой.

Автоматическая генерация документации[править | править код]

Специальным образом оформленные комментарии (т. н. документирующие комментарии) используются для автоматического создания документации, в первую очередь, к библиотекам функций или классов. Для этого используются генераторы документации, например, такие как javadoc[1] для языка Java, phpDocumentor для PHP[2], doxygen[3] для C и C++ и др.

Документирующие комментарии как правило оформляются как многострочные комментарии в стиле языка Си. В каждом случае комментарий должен находиться перед документируемым элементом. Первым символом в комментарии (и вначале строк комментария) должен быть *. Блоки разделяются пустыми строками.

Пример документирующего комментария

/**
* Имя или краткое описание объекта
* 
* Развернутое описание
* 
* @имя_дескриптора значение
* @return тип_данных
*/

В некоторых средах программирования (например, Eclipse, NetBeans, Python, Visual Studio) документирующие комментарии используются в качестве интерактивной подсказки по интерфейсу классов и функций.

Во время трансляции комментарии распознаются на стадии лексического анализа (и, соответственно, считаются лексемами). Распознавание на стадии препроцессирования накладно и даже чревато ошибками; включение комментариев в синтаксические диаграммы практически невозможно.

В различных языках и средах программирования[править | править код]

  • // однострочный комментарий
  • Ада
-- однострочный комментарий
; однострочный комментарий
COMMENT +
Многострочный комментарий.
+ Строка с этим символом завершает комментарий, вместо плюса может быть другой символ.
' однострочный комментарий> — поддерживается не во всех диалектах
REM однострочный комментарий
; однострочный комментарий
  • BAT-файлы и команды DOS
REM однострочный комментарий
:: однострочный комментарий
# однострочный комментарий
/* многострочный комментарий */
// однострочный комментарий
# однострочный комментарий (для PHP)
Способ комментирования больших кусков кода в C/C++. Используется не для написания комментариев к программе, а для временного сокрытия части функциональности (в Java и JavaScript невозможен):
#if 0
…кусок кода…
#endif
* (на седьмой позиции)  — однострочный комментарий
(* многострочный комментарий *)
{ многострочный комментарий }
// однострочный комментарий
\ стандартный однострочный комментарий
( Комментарий до закрывающей скобки. Может быть многострочным (зависит от реализации). Пробел после открывающей скобки обязателен.)
c однострочный комментарий (в старых версиях Фортрана после латинской c должно идти 5 пробелов)
! однострочный комментарий
<!-- многострочный комментарий -->
  • Конфигурационные (ini) файлы
; неиспользуемый ключ либо другой комментарий
  • Файлы реестра Windows (REG)
; неиспользуемый ключ либо другой комментарий
(* многострочный комментарий *)
# однострочный комментарий
(* многострочный комментарий *)
{ многострочный комментарий }
# однострочный комментарий
=pod
аналог многострочного комментария, используется для написания документации
=cut
# однострочный комментарий
<# многострочный комментарий #>
# однострочный комментарий
-- однострочный комментарий
/* многострочный комментарий */
=begin
многострочный комментарий
=end
# однострочный комментарий
"многострочный комментарий"
% однострочный комментарий
' однострочный комментарий
Rem однострочный комментарий
-- однострочный комментарий
--[[многострочный
комментарий]]
--[[многострочный
комментарий]]--

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

Например, в диалекте Турбо Паскаль псевдокомментарии {$I-} и {$I+} используются для отключения и включения стандартного контроля ошибок ввода-вывода. Похожие специальные комментарии используются в языке разметки HTML для указания типа SGML-документа, «экранирования» таблиц стилей и сценариев на языках JavaScript и VBScript:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
…
<STYLE TYPE="text/css">
<!--
… описание стилей
-->
</STYLE>
…
<SCRIPT TYPE="text/javascript">
 <!-- скрыть содержимое сценария от старых браузеров
 … код сценария на JavaScript
 // конец скрытого содержимого -->
</SCRIPT>

Некоторые комментарии программисты используют в ходе своей работы. Подобные комментарии особенно полезны, когда над одним кодом работает несколько разработчиков. Так, комментарием TODO обычно помечают участок кода, который программист оставляет незавершённым, чтобы вернуться к нему позже. Комментарий FIXME помечает обнаруженную ошибку, которую решают исправить позже. Комментарий XXX обозначает найденную критическую ошибку, без исправления которой нельзя продолжать дальнейшую работу.

ru.wikipedia.org

Урок №9. Комментарии | Уроки С++

  Обновл. 23 Июл 2019  | 

Комментарий — это строка (или несколько строк) текста, которая вставляется в исходный код для объяснения того, что делает этот код. В C++ есть два типа комментариев: однострочные и многострочные.

Однострочные комментарии

Однострочные комментарии — это комментарии, которые пишутся после символов //. Они размещаются в отдельных строках и всё, что находится после этих символов комментирования, игнорируется компилятором. Например:

std::cout << «Hello, world!» << std::endl; // всё, что находится от начала двойного слеша — игнорируется компилятором

std::cout << «Hello, world!» << std::endl; // всё, что находится от начала двойного слеша — игнорируется компилятором

Как правило, однострочные комментарии используются для объяснения одной строчки кода:

std::cout << «Hello, world!» << std::endl; // cout и endl находятся в библиотеке iostream std::cout << «It is so exciting!» << std::endl; // эти комментарии усложняют чтение кода std::cout << «Yeah!» << std::endl; // особенно, когда строки разной длины

std::cout << «Hello, world!» << std::endl; // cout и endl находятся в библиотеке iostream

std::cout << «It is so exciting!» << std::endl; // эти комментарии усложняют чтение кода

std::cout << «Yeah!» << std::endl; // особенно, когда строки разной длины

Размещая комментарии справа от кода, мы затрудняем себе как чтение кода, так и чтение комментариев. Следовательно, однострочные комментарии лучше размещать над строками кода:

// cout и endl находятся в библиотеке iostream std::cout << «Hello, world!» << std::endl; // теперь уже легче читать std::cout << «It is so exciting!» << std::endl; // не так ли? std::cout << «Yeah!» << std::endl;

// cout и endl находятся в библиотеке iostream

std::cout << «Hello, world!» << std::endl;

 

// теперь уже легче читать

std::cout << «It is so exciting!» << std::endl;

 

// не так ли?

std::cout << «Yeah!» << std::endl;

Многострочные комментарии

Многострочные комментарии — это комментарии, которые пишутся между символами /* */. Всё, что находится между звёздочками, игнорируется компилятором:

/* Это многострочный комментарий. Эта строка игнорируется и эта тоже. */

/* Это многострочный комментарий.

Эта строка игнорируется

и эта тоже. */

Так как всё, что находится между звёздочками, игнорируется, то иногда вы можете наблюдать следующее:

/* Это многострочный комментарий. * Звёздочки слева * упрощают чтение текста */

/* Это многострочный комментарий.

* Звёздочки слева

* упрощают чтение текста

*/

Многострочные комментарии не могут быть вложенными (т.е. одни комментарии внутри других):

/* Это многострочный /* комментарий */ а это уже не комментарий */ // Верхний комментарий заканчивается перед первым */, а не перед вторым */

/* Это многострочный /* комментарий */ а это уже не комментарий */

// Верхний комментарий заканчивается перед первым */, а не перед вторым */

Правило: Никогда не используйте вложенные комментарии.

Как правильно писать комментарии?

Во-первых, на уровне библиотек/программ/функций комментарии отвечают на вопрос «ЧТО?»: «Что делают эти библиотеки/программы/функции?». Например:

// Эта программа вычисляет оценку студента за семестр на основе его оценок за модули // Эта функция использует метод Ньютона для вычисления корня функции // Следующий код генерирует случайное число

// Эта программа вычисляет оценку студента за семестр на основе его оценок за модули

 

// Эта функция использует метод Ньютона для вычисления корня функции

// Следующий код генерирует случайное число

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

Во-вторых, внутри библиотек/программ/функций комментарии отвечают на вопрос «КАК?»: «Как код выполняет задание?»:

/* Для расчёта итоговой оценки студента, мы добавляем все его оценки за уроки и домашние задания, а затем делим получившееся число на общее количество оценок. Таким образом мы получаем средний балл студента. */

/* Для расчёта итоговой оценки студента, мы добавляем все его оценки за уроки и домашние задания,

   а затем делим получившееся число на общее количество оценок.

   Таким образом мы получаем средний балл студента. */

// Чтобы получить рандомный (случайный) элемент, мы выполняем следующее: // 1) Составляем список всех элементов. // 2) Вычисляем среднее значение для каждого элемента, исходя из его веса, цвета и цены. // 3) Выбираем любое число. // 4) Определяем соответствие элемента случайно выбранному числу. // 5) Возвращаем случайный элемент.

// Чтобы получить рандомный (случайный) элемент, мы выполняем следующее:

 

// 1) Составляем список всех элементов.

// 2) Вычисляем среднее значение для каждого элемента, исходя из его веса, цвета и цены.

// 3) Выбираем любое число.

// 4) Определяем соответствие элемента случайно выбранному числу.

// 5) Возвращаем случайный элемент.

Эти комментарии позволяют пользователю понять, каким образом код выполняет поставленное ему задание.

В-третьих, на уровне стейтментов (однострочного кода) комментарии отвечают на вопрос «ПОЧЕМУ?»: «Почему код выполняет задание именно таким образом, а не другим?». Плохой комментарий на уровне стейтментов объясняет, что делает код. Если вы когда-нибудь писали код, который был настолько сложным, что нужен был комментарий, который бы объяснял, что он делает, то вам нужно было бы не писать комментарий, а переписывать целый код.

Примеры плохих и хороших однострочных комментариев:

// Присваиваем переменной sight значение 0

sight = 0;

// Игрок выпил зелье слепоты и ничего не видит

sight = 0;

// Рассчитываем стоимость элементов

cost = items / 2 * storePrice;

// Нам нужно разделить все элементы на 2, потому что они куплены по парам

cost = items / 2 * storePrice;

// Мы решили использовать список вместо массива, потому что

// массивы осуществляют медленную вставку.

// Мы используем метод Ньютона для вычисления корня функции, так как

// другого детерминистического способа решения этой задачи нет