Комментарий (компьютерное программирование)

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

В программировании на компьютере комментарий — это текст, встроенный в исходный код , который игнорируется транслятором ( компилятором или интерпретатором ). Как правило, комментарий — это аннотация , призванная сделать код более понятным для программиста — часто объясняющая аспект, который неочевиден в программном (некомментарном) коде. [1] В этой статье комментарий относится к той же концепции в языке программирования , языке разметки , файле конфигурации и любом подобном контексте. [2] Некоторые инструменты разработки , кроме транслятора исходного кода, анализируют комментарии для предоставления таких возможностей, как генерация документов API , статический анализ и интеграция с контролем версий . Синтаксис комментариев различается в зависимости от языка программирования, однако существуют повторяющиеся шаблоны в синтаксисе среди языков, а также схожие аспекты, связанные с содержимым комментариев.

Гибкость, поддерживаемая комментариями, допускает широкую степень вариативности стиля контента. Для обеспечения единообразия соглашения о стиле обычно являются частью руководства по стилю программирования . Но лучшие практики спорны и противоречивы. [3] [4]

Общие атрибуты

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

Большинство языков поддерживают многострочные блочные (или потоковые) и/или однострочные комментарии. Блочный комментарий ограничивается текстом , который отмечает начало и конец текста комментария. Он может охватывать несколько строк или занимать любую часть строки. Некоторые языки позволяют рекурсивно вкладывать блочные комментарии друг в друга, но другие этого не делают. [5] [6] [7] Строчный комментарий заканчивается в конце текстовой строки. В современных языках строчный комментарий начинается с разделителя, но некоторые старые языки обозначают столбец, в котором последующий текст считается комментарием. [7] Многие языки поддерживают как блочные, так и строчные комментарии — используя разные разделители для каждого. Например, C , C++ и их многочисленные производные поддерживают блочные комментарии, разделенные /*и */, и строчные комментарии, разделенные //. Другие языки поддерживают только один тип комментариев. [7]

Комментарии также можно классифицировать как прологовые или встроенные в зависимости от их положения и содержания относительно программного кода. Прологовый комментарий — это комментарий (или группа связанных комментариев), расположенный в верхней части связанной темы программирования, например, перед объявлением символа или в верхней части файла. Встроенный комментарий — это комментарий, расположенный на той же строке и справа от программного кода, на который он ссылается. [8] Как прологовые, так и встроенные комментарии могут быть представлены как строчные или блочные комментарии. Например:

/* * комментарий блока пролога; если это о foo() */ bool foo () { return true ; /* комментарий встроенного блока; если это о этом return */ }     // // комментарий к строке пролога; если это примерно bar() // bool bar () { return false ; // комментарий к строке пролога; если это примерно return }     

Примеры использования

Опишите намерение

Комментарии могут объяснить намерение автора – почему код такой, какой он есть. Некоторые утверждают, что описание того, что делает код, излишне. Необходимость объяснять, что признак того, что он слишком сложен и его следует переработать.

«Не документируйте плохой код – перепишите его». [9]
«Хорошие комментарии не повторяют код и не объясняют его. Они проясняют его намерение. Комментарии должны объяснять на более высоком уровне абстракции, чем код, что вы пытаетесь сделать». [10]

Выделите необычную практику

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

' Вторая переменная dim из-за ошибок сервера, возникающих при повторном использовании данных формы. ' Документация по проблеме поведения сервера отсутствует, поэтому просто кодирую вокруг нее. vtx = server . mappath ( "local settings" )  

Приведенный ниже пример объясняет, почему была выбрана сортировка вставками , а не быстрая сортировка , поскольку первая, теоретически, медленнее второй.

 list = [ f ( b ), f ( b ), f ( c ), f ( d ), f ( a ), ... ] ; // Нужна стабильная сортировка. К тому же производительность на самом деле не имеет значения. insertion_sort ( list );               

Опишите алгоритм

Комментарии могут описывать алгоритм как псевдокод . Это можно сделать до написания кода в качестве первого черновика. Если оставить в коде, это может упростить проверку кода , позволяя сравнивать полученный код с предполагаемой логикой. Например:

/* цикл в обратном порядке по всем элементам, возвращаемым сервером (они должны обрабатываться в хронологическом порядке)*/ for ( i = ( numElementsReturned - 0 ); i >= 1 ; i -- ) { /* обработка данных каждого элемента */ updatePattern ( i , returnsElements [ i ]); }             

Иногда код содержит новое или примечательное решение, которое требует пояснительного комментария. Такие объяснения могут быть длинными и включать диаграммы и формальные математические доказательства. Это может описывать то, что код делает, а не намерение, но может быть полезно для поддержки кода. Это может применяться для узкоспециализированных проблемных областей или редко используемых оптимизаций, конструкций или вызовов функций. [11]

Ссылка

Когда какой-либо аспект кода основан на информации во внешней ссылке, комментарии ссылаются на ссылку. Например, как URL или название книги и номер страницы.

Комментарий

Распространенная практика разработчиков — комментировать одну или несколько строк кода. Программист добавляет синтаксис комментариев, который преобразует программный код в комментарии, так что то, что было исполняемым кодом, больше не будет выполняться во время выполнения. Иногда этот прием используется для поиска причины ошибки. Систематически комментируя и запуская части программы, можно найти проблемный исходный код.

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

Хранить метаданные

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

Некоторые инструменты программирования записывают метаданные в код в виде комментариев. [12] Например, инструмент контроля версий может записывать метаданные, такие как автор, дата и номер версии, в каждый файл, когда он фиксируется в репозитории. [13]

Интеграция с инструментами разработки

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

Некоторые редакторы исходного кода поддерживают настройку через метаданные в комментариях. [14] Одним из конкретных примеров является функция modeline в Vim , которая настраивает обработку символов табуляции. Например:

# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

Поддержка создания документации

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

Хотя некоторые утверждают, что документация API может быть более качественной, если написана более традиционным и ручным способом, некоторые утверждают, что хранение информации о документации в комментариях кода упрощает процесс документирования, а также увеличивает вероятность того, что документация будет актуальна. [15] Примерами являются Javadoc , Ddoc , Doxygen , Visual Expert и PHPDoc . Формы docstring поддерживаются Python , Lisp , Elixir и Clojure . [16] C# , F# и Visual Basic .NET реализуют похожую функцию, называемую «XML Comments», которые считываются IntelliSense из скомпилированной сборки .NET . [17]

Визуализация

В комментарий можно включить ASCII - визуализацию искусства , например логотип , диаграмму или блок-схему . [18]

Следующий фрагмент кода отображает поток процесса скрипта системного администрирования ( файл скрипта Windows ). Хотя раздел, помечающий код, выглядит как комментарий, диаграмма находится в разделе XML CDATA , который технически не является комментарием, но служит той же цели здесь. [19] Хотя эта диаграмма могла бы быть в комментарии, пример иллюстрирует один случай, когда программист решил не использовать комментарий как способ включения ресурсов в исходный код. [19]

<!-- начало: wsf_resource_nodes --> <resource id= "ProcessDiagram000" > <![CDATA[ HostApp (Main_process)  |  V script.wsf (app_cmd) --> ClientApp (async_run, batch_process)  |  |  V  mru.ini (mru_history) ]]> </resource> 

Хранить данные о ресурсах

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

Процесс разработки документа

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

Расширить синтаксис языка

Иногда код, отформатированный как комментарий, перегружается для передачи дополнительной информации переводчику, например, условные комментарии . Таким образом, синтаксис, который обычно указывает на комментарий, может фактически представлять программный код; а не код комментария. Такой синтаксис может быть практичным способом поддержания совместимости при добавлении дополнительной функциональности, но некоторые считают такое решение ляпом . [ 20]

Другие примеры включают директивы интерпретатора :

  • « Shebang » в Unix #!— используется в первой строке скрипта для указания на используемый интерпретатор.
  • «Волшебные комментарии», идентифицирующие кодировку, используемую исходным файлом, [21] например, PEP 263 Python. [22]

Приведенный ниже скрипт для Unix-подобной системы демонстрирует оба варианта использования:

#!/usr/bin/env python3 # -*- кодировка: UTF-8 -*- печать ( "Тестирование" )

Компилятор gcc (с 2017 года) ищет комментарий в операторе switch , если case fall-thru переходит в следующий case. Если явное указание fall-thru не найдено, то компилятор выдает предупреждение о возможной проблеме кодирования. Вставка такого комментария о fall-thru является давней традицией, и компилятор кодифицировал эту практику. [23] Например:

переключатель ( команда ) {   случай CMD_SHOW_HELP_AND_EXIT :  do_show_help (); /* Провал */ случай CMD_EXIT :  do_exit (); перерыв ; }

Снять стресс

Чтобы снять стресс или попытаться пошутить, программисты иногда добавляют комментарии о качестве кода, инструментах, конкурентах, работодателях, условиях труда или других, возможно, непрофессиональных темах — иногда используя ненормативную лексику . [24] [25]

Нормативные взгляды

Существуют различные нормативные взгляды и устоявшиеся мнения относительно правильного использования комментариев в исходном коде. [26] [27] Некоторые из них являются неформальными и основаны на личных предпочтениях, в то время как другие публикуются или обнародуются как официальные рекомендации для конкретного сообщества. [28]

Нужны комментарии

Эксперты расходятся во мнениях относительно того, уместны ли комментарии в исходном коде и когда они уместны. [9] [29] Некоторые утверждают, что исходный код должен быть написан с небольшим количеством комментариев, исходя из того, что исходный код должен быть самоочевидным или самодокументируемым . [9] Другие предлагают подробно комментировать код (нередко более 50% непробельных символов в исходном коде содержатся в комментариях). [30] [31]

Между этими точками зрения находится утверждение, что комментарии сами по себе не являются ни полезными, ни вредными, и важно, чтобы они были корректными и синхронизировались с исходным кодом, и опускались, если они излишни, чрезмерны, сложны в поддержке или иным образом бесполезны. [32] [33]

Комментарии иногда используются для документирования контрактов при подходе к программированию , основанном на проектировании по контракту .

Уровень детализации

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

Например, следующий комментарий по Java подойдет для вводного текста, предназначенного для обучения начинающих программистов:

String s = "Wikipedia" ; /* Присваивает значение "Wikipedia" переменной s. */    

Однако этот уровень детализации не будет уместен в контексте производственного кода или других ситуаций, в которых задействованы опытные разработчики. Такие элементарные описания не соответствуют руководству: «Хорошие комментарии... проясняют намерение». [10] Кроме того, для профессиональных сред кодирования уровень детализации обычно хорошо определен, чтобы соответствовать конкретным требованиям производительности, определяемым бизнес-операциями. [31]

Стили

Комментарии, как текст свободной формы, могут быть оформлены множеством способов. Многие предпочитают стиль, который является последовательным, необструктивным, легко модифицируемым и трудно нарушаемым. Поскольку некоторые утверждают, что уровень последовательности является ценным и стоящим, последовательный стиль комментирования иногда согласовывается до начала проекта или возникает по мере его разработки. [34]

Следующие фрагменты на языке C демонстрируют некоторое разнообразие стилей блочных комментариев:

/*  Это тело комментария. */
/******************************\ * * * Это текст комментария. * * * \******************************/

Такие факторы, как личные предпочтения, гибкость инструментов программирования могут влиять на используемый стиль комментирования. Например, первый вариант может быть предпочтителен для программистов, которые используют редактор исходного кода , который не форматирует комментарий автоматически, как показано во втором примере.

Консультант по программному обеспечению и технологический комментатор Аллен Холуб [35] выступает за выравнивание левого края комментариев: [36]

 /* Это стиль, рекомендованный Голубом для C и C++.  * Он продемонстрирован в ''Enough Rope'', в правиле 29.  */
 /* Это еще один способ сделать это, также на языке C. ** Это проще сделать в редакторах, которые не делают автоматически отступ со второй ** по последнюю строку комментария на один пробел от первой. ** Это также используется в книге Голуба, в правиле 31. */

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

print $s . "\n" ; # Добавить символ новой строки после печати    

Если язык поддерживает как строчные, так и блочные комментарии, команды программистов могут решить, когда использовать какой из них. Например, строчные комментарии только для второстепенных комментариев, а блочные комментарии — для абстракций более высокого уровня.

Теги

Программисты часто используют одно из выбранных слов – также известных как теги , кодовые теги [37] [38] и токены [39] – для категоризации информации в комментарии. Программисты могут использовать эти теги, выполняя поиск с помощью текстового редактора или grep . Некоторые редакторы выделяют текст комментария на основе тегов.

Обычно используемые теги включают в себя:

  • BUG, DEBUG — определяет известную ошибку ; возможно, подразумевает, что ее следует исправить
  • FIXME — подразумевает, что необходимо проделать работу по исправлению ошибки
  • HACK, BODGE, KLUDGE — обозначает решение, которое можно считать некачественным
  • TODO — описывает некоторую работу, которую нужно сделать
  • ПРИМЕЧАНИЕ — относительно общая информация
  • UNDONE — отмена или «откат» предыдущего кода

Например:

инт фоо() { // TODO реализовать}

Примеры

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

Языки фигурных скобок

Многие языки с фигурными скобками, такие как C, C++ и их многочисленные производные, разделяют строчный комментарий с помощью //, а блочный комментарий с помощью /*и */. Первоначально в C отсутствовал строчный комментарий, но он был добавлен в C99 . Известные языки включают: C, C++, C# , D , Java , JavaScript и Swift . Например:

/* * Проверьте, превышен ли максимальный лимит процессов, но обязательно исключите root. * Это необходимо, чтобы при входе в систему можно было установить лимит процессов для каждого пользователя * на значение ниже, чем количество запущенных процессов root. */ bool isOverMaximumProcessLimit () { // TODO implement }   

Некоторые языки, включая D и Swift, допускают вложение блоков, а другие — нет, включая C и C++.

Пример вложенных блоков в D:

// строчный комментарий /*  блочный комментарий */ /+ начало внешнего блока  /+ внутренний блок +/  конец внешнего блока +/

Пример вложенных блоков в Swift:

/* Это начало внешнего комментария.  /* Это вложенный комментарий. */ Это конец внешнего комментария. */

Скриптинг

Шаблон во многих скриптовых языках заключается в том, чтобы разделять строчный комментарий с помощью #. Поддержка блочного комментария варьируется. Известные языки включают: Bash , Raku , Ruby , Perl , PowerShell , Python и R .

Пример на языке R:

# Это комментарий print ( "Это не комментарий" ) # Это еще один комментарий 

Блок в Ruby

Блочный комментарий разделяется =beginи , =endкоторые начинают строку. Например:

puts "не комментарий" # это комментарий puts "не комментарий" =begin все, что написано в этих строках, предназначено только для человеческого читателя =end puts "не комментарий"   

Блок в Perl

Вместо обычной конструкции блочного комментария Perl использует литературное программирование с использованием разметки POD (простой старой документации) . [40] Например: [41]

=item Pod::List-E<gt>new() Создать новый объект списка. Свойства могут быть указаны через ссылку на хэш, например:  my $list = Pod::List->new({ -start => $., -indent => 4 }); =cut sub new { ... }   

Raku (ранее называвшийся Perl 6) использует те же строчные комментарии и комментарии POD, что и Perl , но добавляет настраиваемый тип блочного комментария: «многострочные / встроенные комментарии». [42] Он начинается с #`открывающей скобки и заканчивается соответствующим закрывающей скобкой. [42] Например:

#`{{ "закомментировать" эту версию toggle-case(Str:D $s) Переключает регистр каждого символа в строке:  my Str $toggled-string = toggle-case("mY NAME IS mICHAEL!"); }} sub  toggle-case ( Str:D  $s ) #`( эта версия скобок используется сейчас ) { ...}

Блокировка в PowerShell

PowerShell поддерживает блочный комментарий, разделенный <#и #>. Например:

# Однострочный комментарий <# Многострочный  комментарий  #>

Блок в Python

Хотя Python не предусматривает блочные комментарии [43], для этой цели часто используется голый строковый литерал , представленный строкой, заключенной в тройные кавычки. [44] [43] В приведенных ниже примерах строки, заключенные в тройные двойные кавычки, действуют как комментарии, но также рассматриваются как строки документации :

""" В верхней части файла находится строка документации модуля """класс  MyClass : """Строка документации класса"""  def  my_method ( self ): """Строка документации метода""" 

Разметка браузера

Языки разметки в целом различаются по синтаксису комментариев, но некоторые из известных форматов интернет-разметки, такие как HTML и XML, разделяют блочный комментарий с помощью <!--и -->и не поддерживают строчные комментарии. Пример в XML:

<!-- выберите контекст здесь --> <param name= "context" value= "public" />   

Для совместимости с SGML внутри комментариев не допускается использование двойного дефиса (--).

ColdFusion предоставляет синтаксис, похожий на комментарий HTML , но использует три тире вместо двух. CodeFusion допускает вложенные блочные комментарии.

Двойное тире

Относительно свободный набор языков, используемых --для однострочного комментария. Известные языки включают: Ada , Eiffel , Haskell , Lua , SQL и VHDL . Поддержка блочных комментариев варьируется. Пример на Ada:

-- задача авиадиспетчера принимает запросы на взлет и посадку тип задачи  Controller ( My_Runway : Runway_Access ) -- записи задач для синхронной передачи сообщений entry Request_Takeoff ( ID : in Airplane_ID ; Takeoff : out Runway_Access ); entry Request_Approach ( ID : in Airplane_ID ; Approach : out Runway_Access ); end Controller ;                

Блок в Haskell

В Haskell блочный комментарий разделяется {-и -}. Например:

{- это комментарий к нескольким строкам -} -- а это комментарий к одной строке putStrLn "Wikipedia" -- это еще один комментарий  

Haskell также предоставляет грамотный метод программирования комментариев, известный как «Bird Style». [45] Строки, начинающиеся с , >интерпретируются как код, а все остальное считается комментарием. Еще одним дополнительным требованием является пустая строка до и после блока кода:

В стиле Bird перед кодом необходимо оставить пробел.> факт :: Целое число -> Целое число > факт 0 = 1 > факт ( n + 1 ) = ( n + 1 ) * факт n             И после кода тоже нужно оставить пустую строку.

Грамотное программирование также может быть выполнено с помощью LaTeX . Пример определения:

\usepackage { verbatim } \newenvironment { code }{ \verbatim }{ \endverbatim }

Используется следующим образом:

% исходный файл LaTeX Вызов
функции \verb |fact n| вычисляет $ n ! $ если $ n \ge 0 $ , вот определение: \\ \begin { code } fact :: Integer -> Integer fact 0 = 1 fact ( n + 1 ) = ( n + 1 ) * fact n \end { code }
Вот более подробное объяснение с использованием разметки \LaTeX {}              

Блок в Lua

Lua поддерживает блочные комментарии, разделенные символами --[[и ]][46]. Например:

--[[Многострочный длинный комментарий ]]

Блок в SQL

В некоторых вариантах SQL /**/поддерживается комментарий блока языка в фигурных скобках ( ). Варианты включают: Transact-SQL , MySQL , SQLite , PostgreSQL и Oracle . [47] [48] [49] [50] [51]

MySQL также поддерживает строчный комментарий, разделенный символом #.

Менее распространённый синтаксис

АПЛ

APL использует для комментария строки. Например:

⍝ Теперь складываем числа: c a + b ⍝ сложение 

В диалектах, имеющих примитивы («left») и («right»), комментарии часто могут находиться внутри или отдельно от операторов в виде игнорируемых строк:

d 2 × c 'где' c a + 'связан' b    

AppleScript

AppleScript поддерживает как строчные, так и блочные комментарии. Например:

# строка комментария (в более поздних версиях) (* Эта программа отображает приветствие. *) on  greet ( myGreeting )  display dialog  myGreeting  &  " world!" end  greet-- Показать приветственное приветствие ( "Привет" )

БАЗОВЫЙ

В ранних версиях BASIC для обозначения строчного комментария использовалось REMсокращение от remark.

10 REM Эта программа BASIC демонстрирует использование операторов PRINT и GOTO. 15 REM Она заполняет экран фразой "HELLO" 20 PRINT "HELLO" 30 GOTO 20      

В более поздних вариациях, включая Quick Basic , Q Basic , Visual Basic (VB), VB.NET , VBScript , FreeBASIC и Gambas , строка комментария отделяется '(апострофом). Пример в VB.NET:

Public Class Form1 Private Sub Button1_Click ( sender As Object , e As EventArgs ) Handles Button1 . Click ' новый стиль комментария к строке rem старый стиль комментария к строке все еще поддерживается MessageBox . Show ( "Hello, World" ) ' показать диалоговое окно с приветствием End Sub End Class                   

Конфигурация Cisco IOS и IOS-XE

Восклицательный знак ( ! ) может использоваться для обозначения комментариев в режиме конфигурации маршрутизатора Cisco, однако такие комментарии не сохраняются в энергонезависимой памяти (которая содержит конфигурацию запуска) и не отображаются командой «show run». [52] [53]

Можно вставить понятный человеку контент, который фактически является частью конфигурации и может быть сохранен в стартовой конфигурации NVRAM с помощью:

  • Команда «description», используемая для добавления описания к конфигурации интерфейса или соседа BGP .
  • Параметр «имя» для добавления примечания к статическому маршруту
  • Команда «remark» в списках доступа
! Вставьте текст ниже, чтобы вручную перенаправить трафикконфигурация тцелочисленный gi0/2нет затвораip маршрут 0.0.0.0 0.0.0.0 gi0/2 имя ISP2нет ip маршрута 0.0.0.0 0.0.0.0 gi0/1 имя ISP1целочисленный gi0/1закрытьВыход

Фортран

Следующий фрагмент кода Fortran IV показывает, что синтаксис комментариев ориентирован на столбцы. Буква Cв первом столбце заставляет всю строку рассматриваться как комментарий.

C C Строки, начинающиеся с «C» в первом столбце (он же комментарий), являются комментариями C WRITE ( 6 , 610 )  610 FORMAT ( 12 H HELLO WORLD ) END        

Следующий фрагмент кода Fortran 90 демонстрирует более современный синтаксис строчного комментария; текст после !.

! Программа комментариев comment_test print '(A)' , 'Hello world' ! также программа комментариев end    

МАТЛАБ

В языке программирования MATLAB символ '%' обозначает однострочный комментарий. Многострочные комментарии также доступны через скобки %{ и %} и могут быть вложенными, например

% Это производные для каждого члена d = [ 0 - 1 0 ];    %{   %{ (  Пример вложенного комментария, отступы для косметики (и игнорируются).) %} Формируем последовательность   , следуя формуле Тейлора . Обратите внимание , что мы работаем с вектором . % } seq = d . * ( x - c ) . ^ n ./ ( factorial ( n ) )                      % Складываем, чтобы получить приближение Тейлора approx = sum ( seq )  

Ним

Nim разделяет строчный комментарий с помощью #, а блочные комментарии — с помощью #[и ]#. Блочные комментарии могут быть вложенными.

Nim также имеет комментарии документации, которые используют смешанную разметку Markdown и ReStructuredText . Строчный комментарий документации использует '##', а блочный комментарий документации использует '##[' и ']##'. Компилятор может генерировать документацию HTML , LaTeX и JSON из комментариев документации. Комментарии документации являются частью абстрактного синтаксического дерева и могут быть извлечены с помощью макросов. [54]

## Документация модуля *ReSTructuredText* и **MarkDown** # Это комментарий, но это не комментарий к документации.тип Котенок = объект ## Документация типа возраст : int ## Документация поля       proc purr ( self : Kitten ) = ## Документация функции echo "Purr Purr" # Это комментарий, но это не комментарий документации.       # Это комментарий, но не комментарий к документации.

OCaml

OCaml поддерживает вложенные комментарии. Например:

codeLine (* уровень комментария 1(*уровень комментария 2*)*)

Паскаль, Дельфи

В Pascal и Delphi блочный комментарий разделяется символами {и }, а в качестве альтернативы для компьютеров, которые не поддерживают эти символы, (*также *)поддерживаются. Строчный комментарий разделяется символами \\. [55] В более современном семействе языков Никлауса Вирта (включая Modula-2 и Oberon ) комментарии разделяются символами (*и *). [56] [57] Комментарии могут быть вложенными. Например:

(* проверка диагоналей *) columnDifference := testColumn - column ; if ( row + columnDifference = testRow ) или .......           

PHP

Комментарии в PHP могут быть в стиле фигурных скобок (как строка, так и блок), или строка, разделенная #l. Блоки не могут быть вложенными. Начиная с PHP 8, a #означает комментарий только в том случае, если за ним не следует непосредственно [. В противном случае он разделяет атрибут, который продолжается до следующего ]. Например:

/** * Этот класс содержит пример документации. * @author Unknown */ #[ Attribute ] class  MyAttribute  {  const  VALUE  =  'value' ;  // Комментарий в стиле C++  private  $value ;  # Комментарий в стиле скрипта  public  function  __construct ( $value  =  null )  {  $this -> value  =  $value ;  } }

Проблемы безопасности

В интерпретируемых языках комментарии видны конечному пользователю программы. В некоторых случаях, например, в разделах кода, которые «закомментированы», это может представлять уязвимость безопасности . [58]

Смотрите также

Примечания и ссылки

  1. ^ Пенни Грабб, Армстронг Таканг (2003). Техническое обслуживание программного обеспечения: концепции и практика . World Scientific. стр. 7, пожалуйста, начните с 120–121. ISBN 978-981-238-426-3.
  2. ^ Гангули, Мадхушри (2002). Использование JSP . Нью-Йорк: Wiley. ISBN 978-0-471-21974-3., Хьюитт, Эбен (2003). Java для разработчиков Coldfusion . Верхняя Седловая река: Pearson Education. ISBN 978-0-13-046180-3.
  3. ^ WR, Dietrich (2003). Прикладное распознавание образов: алгоритмы и реализация на языке C++ . Springer. ISBN 978-3-528-35558-6.предлагает точки зрения на правильное использование комментариев в исходном коде. стр. 66.
  4. ^ Киз, Джессика (2003). Справочник по программной инженерии . CRC Press. ISBN 978-0-8493-1479-7.обсуждает комментарии и «Науку документирования» стр. 256.
  5. ^ Хайэм, Десмонд (2005). Руководство MATLAB . SIAM. ISBN 978-0-89871-578-1.
  6. ^ Вермейлен, Эл (2000). Элементы стиля Java. Cambridge University Press. ISBN 978-0-521-77768-1.
  7. ^ abc "Использование правильного комментария в Java". 2000-03-04 . Получено 2007-07-24 .
  8. ^ Диксит, Дж. Б. (2003). Основы информатики и программирование на языке C. Laxmi Publications. ISBN 978-81-7008-882-0.
  9. ^ abc Элементы стиля программирования , Керниган и Плэугер
  10. ^ ab Код завершен , Макконнелл
  11. ^ Spinellis, Diomidis (2003). Чтение кода: перспектива открытого исходного кода . Addison-Wesley. ISBN 978-0-201-79940-8.
  12. ^ См., например, Уинн-Пауэлл, Род (2008). Mac OS X для фотографов: оптимизированный рабочий процесс обработки изображений для пользователей Mac. Оксфорд: Focal Press. стр. 243. ISBN 978-0-240-52027-8.
  13. ^ См. например, Берлин, Дэниел (2006). Practical Subversion, Второе издание . Беркли: APress. стр. 168. ISBN 978-1-59059-753-8.
  14. ^ Лэмб, Линда (1998). Learning the VI Editor. Севастополь: O'Reilly & Associates. ISBN 978-1-56592-426-0.
  15. ^ Эмблер, Скотт (2004). Объектный учебник: гибкая разработка на основе моделей с использованием UML 2.0 . Издательство Кембриджского университета. ISBN 978-1-397-80521-8.
  16. ^ Определение функции с помощью docstring в Clojure
  17. ^ Murach. C# 2005. стр. 56.
  18. ^ "CodePlotter 1.6 – Добавляйте и редактируйте диаграммы в коде с помощью этого инструмента, похожего на Visio". Архивировано из оригинала 2007-07-14 . Получено 2007-07-24 .
  19. ^ ab Нидерст, Дженнифер (2006). Веб-дизайн в двух словах: Краткий справочник по настольному компьютеру . O'Reilly. ISBN 978-0-596-00987-8.Иногда разница между «комментарием» и другими элементами синтаксиса языка программирования или разметки влечет за собой тонкие нюансы. Нидерст указывает на одну такую ​​ситуацию, заявляя: «К сожалению, программное обеспечение XML считает комментарии неважной информацией и может просто удалить комментарии из документа перед его обработкой. Чтобы избежать этой проблемы, используйте вместо этого раздел XML CDATA».
  20. ^ c2: Горячие комментарии
  21. ^ "class Encoding". Ruby . ruby-lang.org . Получено 5 декабря 2018 г. .
  22. ^ "PEP 263 – Определение кодировок исходного кода Python". Python.org . Получено 5 декабря 2018 г. .
  23. ^ Полачек, Марек (2017-03-10). "-Wimplicit-fallthrough в GCC 7". Red Hat Developer . Red Hat . Получено 10 февраля 2019 .
  24. ^ Лиза Идичикко (27 марта 2014 г.). «Программисты Microsoft спрятали кучу ненормативной лексики в раннем программном коде». Business Insider Australia . Архивировано из оригинала 29 декабря 2016 г.
  25. ^ (см., например, Linux Sware Count).
  26. ^ Гудлифф, Пит (2006). Code Craft . Сан-Франциско: No Starch Press. ISBN 978-1-59327-119-0.
  27. ^ Смит, Т. (1991). Промежуточные принципы и методы программирования с использованием Паскаля . Belmont: West Pub. Co. ISBN 978-0-314-66314-6.
  28. ^ См. например, Koletzke, Peter (2000). Oracle Developer Advanced Forms & Reports . Беркли: Osborne/McGraw-Hill. ISBN 978-0-07-212048-6.страница 65.
  29. ^ "Худшая практика - плохие комментарии" . Получено 24.07.2007 .
  30. ^ Морелли, Ральф (2006). Java, Java, Java: объектно-ориентированное решение проблем . Prentice Hall College. ISBN 978-0-13-147434-5.
  31. ^ ab "Как писать комментарии к документам для инструмента Javadoc" . Получено 24.07.2007 .В рекомендациях Javadoc указано, что комментарии имеют решающее значение для платформы. Кроме того, соответствующий уровень детализации довольно четко определен: «Мы тратим время и усилия, сосредоточившись на определении граничных условий, диапазонов аргументов и угловых случаев, а не на определении общих терминов программирования, написании концептуальных обзоров и включении примеров для разработчиков».
  32. ^ Йордон, Эдвард (2007). Методы структуры и дизайна программ . Мичиганский университет. 013901702X.Отсутствующие комментарии могут затруднить понимание кода, но комментарии могут быть вредны, если они устарели, избыточны, неверны или иным образом затрудняют понимание предполагаемого назначения исходного кода.
  33. ^ Dewhurst, Stephen C (2002). C++ Gotchas: Избегание распространенных проблем в кодировании и проектировании . Addison-Wesley Professional. ISBN 978-0-321-12518-7.
  34. ^ "Coding Style". Архивировано из оригинала 2007-08-08 . Получено 2007-07-24 .
  35. ^ "Аллен Холуб". Архивировано из оригинала 2007-07-20 . Получено 24-07-2007 .
  36. Аллен Холуб, Достаточно веревки, чтобы выстрелить себе в ногу , ISBN 0-07-029689-8 , 1995, McGraw-Hill 
  37. ^ "PEP 0350 – Codetags", Python Software Foundation
  38. ^ «Никогда ничего не забывайте до, после и во время кодирования», использование комментариев «codetag» в качестве продуктивных остатков
  39. ^ «Использование списка задач», msdn.microsoft.com
  40. ^ "perlpod – простой старый формат документации" . Получено 2011-09-12 .
  41. ^ "Pod::ParseUtils – помощники для анализа и преобразования POD" . Получено 2011-09-12 .
  42. ^ ab "Perl 6 Documentation – Syntax (Comments)" . Получено 2017-04-06 .
  43. ^ ab "Python 3 Basic Syntax". Архивировано из оригинала 19 августа 2021 г. Получено 25 февраля 2019 г. Тройные кавычки обрабатываются как обычные строки, за исключением того, что они могут охватывать несколько строк. Под обычными строками я подразумеваю, что если они не назначены переменной, то они будут немедленно удалены сборщиком мусора, как только этот код выполнится. Следовательно, они не игнорируются интерпретатором так же, как комментарий #a.
  44. ^ «Совет по Python: вы можете использовать многострочные строки в качестве многострочных комментариев», 11 сентября 2011 г., Гвидо ван Россум
  45. ^ "Грамотное программирование". haskell.org .
  46. ^ "Программирование на Lua 1.3". www.Lua.org . Получено 2017-11-08 .
  47. ^ Талмейдж, Рональд Р. (1999). Microsoft SQL Server 7. Prima Publishing. ISBN 978-0-7615-1389-6.
  48. ^ "MySQL 8.0 Reference Manual". Oracle Corporation . Получено 2 января 2020 г.
  49. ^ "SQL As Understand By SQLite". SQLite Consortium . Получено 2 января 2020 г.
  50. ^ "PostgreSQL 10.11 Documentation". PostgreSQL Global Development Group . Получено 2 января 2020 г.
  51. ^ "Oracle® Database SQL Reference". Корпорация Oracle . Получено 2 января 2020 г.
  52. ^ "Оставьте комментарий в running-config". Cisco Learning Network (форум для обсуждения) .
  53. ^ «Руководство по управлению файлами конфигурации, Cisco IOS XE Release 3S (серия ASR 900)».
  54. ^ макросы.extractDocCommentsAndRunnables
  55. ^ Кэтлин Дженсен, Никлаус Вирт (1985). Руководство пользователя и отчет Pascal . Спрингер-Верлаг. ISBN 0-387-96048-1.
  56. ^ Никлаус Вирт (1983). Программирование в Модуле-2 . Спрингер-Верлаг. ISBN 0-387-15078-1.
  57. ^ * Мартин Райзер, Никлаус Вирт (1992). Программирование на языке Oberon . Addison-Wesley. ISBN 0-201-56543-9.
  58. ^ Андресс, Мэнди (2003). Выживание в безопасности: как интегрировать людей, процессы и технологии . CRC Press. ISBN 978-0-8493-2042-2.

Дальнейшее чтение

  • Мовшовиц-Аттиас, Дана и Коэн, Уильям У. (2013) Модели естественного языка для прогнозирования программных комментариев. В Ассоциации компьютерной лингвистики (ACL), 2013.
  • Как писать комментарии Денис Круковский
  • Документация по исходному коду в виде живого руководства пользователя от PTLogica
  • Как писать комментарии для инструмента Javadoc
Получено с "https://en.wikipedia.org/w/index.php?title=Комментарий_(компьютерное_программирование)&oldid=1270601564#Теги"