stringtranslate.com

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

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

В программировании комментарий это понятное человеку объяснение или аннотация в исходном коде компьютерной программы . Они добавляются с целью сделать исходный код более понятным для человека и обычно игнорируются компиляторами и интерпретаторами . [1] [2] Синтаксис комментариев в различных языках программирования значительно различается.

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

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

Обзор

Комментарии обычно форматируются как блочные комментарии (также называемые прологовыми комментариями или потоковыми комментариями ) или строчные комментарии (также называемые встроенными комментариями ). [3]

Блок комментариев ограничивает область исходного кода, которая может охватывать несколько строк или часть одной строки. Эта область указывается начальным и конечным разделителями . Некоторые языки программирования (например, MATLAB ) позволяют рекурсивно вкладывать друг в друга блоки комментариев, но другие (например, Java ) этого не делают. [4] [5] [6]

Строчные комментарии либо начинаются с разделителя комментариев и продолжаются до конца строки, либо, в некоторых случаях, начинаются с определенного столбца (смещение строки символов) в исходном коде и продолжаются до конца строки. [6]

Некоторые языки программирования используют как блочные, так и строчные комментарии с различными разделителями комментариев. Например, в C++ есть блочные комментарии, разделенные /*и , */которые могут охватывать несколько строк, и строчные комментарии, разделенные //. Другие языки поддерживают только один тип комментариев. Например, комментарии Ada являются строчными комментариями: они начинаются с --и продолжаются до конца строки. [6]

Использует

Как лучше всего использовать комментарии, является предметом спора; разные комментаторы предлагают различные, а иногда и противоположные точки зрения. [7] [8] Существует много разных способов написания комментариев, и многие комментаторы предлагают противоречивые советы. [8]

Планирование и рассмотрение

Комментарии могут использоваться как форма псевдокода для описания намерений перед написанием фактического кода. В этом случае они должны объяснять логику кода, а не сам код.

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

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

Описание кода

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

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

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

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

Алгоритмическое описание

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

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

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

Включение ресурсов

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

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

<!-- начало: 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> 

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

Метаданные

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

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

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

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

Отладка

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

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

Автоматическая генерация документации

Инструменты программирования иногда хранят документацию и метаданные в комментариях. [14] Они могут включать позиции вставки для автоматического включения заголовочного файла, команды для установки режима подсветки синтаксиса файла , [15] или номер ревизии файла . [16] Эти комментарии функционального управления также обычно называются аннотациями . Хранение документации в комментариях исходного кода считается одним из способов упрощения процесса документирования, а также повышения вероятности того, что документация будет обновляться с учетом изменений в коде. [17]

Примерами генераторов документации являются программы Javadoc для использования с Java , Ddoc для D , Doxygen для C , C++ , Java, IDL , Visual Expert для PL/SQL , Transact-SQL , PowerBuilder и PHPDoc для PHP . Формы docstring поддерживаются Python , Lisp , Elixir и Clojure . [18]

C# , F# и Visual Basic .NET реализуют похожую функцию, называемую «XML-комментарии», которые считываются IntelliSense из скомпилированной сборки .NET . [19]

Расширение синтаксиса

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

Одним из конкретных примеров являются docblocks , которые являются специально отформатированными комментариями, используемыми для документирования определенного сегмента кода. Это делает формат DocBlock независимым от целевого языка (при условии, что он поддерживает комментарии); однако это также может привести к появлению множественных или несогласованных стандартов.

Директива использует

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

Вот два примера такого руководства переводчиком:

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

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

Нечто похожее происходит с использованием комментариев в языке C для сообщения компилятору о том, что «провал» по умолчанию в операторе case был сделан намеренно:

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

Вставка такого /* Fall thru */комментария для людей-читателей уже была общепринятой практикой, но в 2017 году компилятор gcc начал искать их (или другие признаки преднамеренного намерения) и, если не находил, выдавал: «предупреждение: это утверждение может быть провалено». [23]

Многие редакторы и IDE будут читать комментарии, отформатированные особым образом. Например, функция "modeline" в Vim ; которая изменит обработку вкладок при редактировании источника с этим комментарием, включенным в верхней части файла:

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

Снятие стресса

Иногда программисты добавляют комментарии, чтобы снять стресс, комментируя инструменты разработки, конкурентов, работодателей, условия труда или качество самого кода. [24] Распространенность этого явления можно легко увидеть на онлайн-ресурсах, которые отслеживают ненормативную лексику в исходном коде. [25]

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

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

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

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

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

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

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

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

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

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

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

Стили

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

Блокировать комментарий

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

/*  Это тело комментария.  Вариант первый. */
/******************************\ * * * Это текст комментария. * * Вариант два. * * * \******************************/

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

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

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

Использование /* и */ в качестве разделителей комментариев блоков было унаследовано от PL/I в языке программирования B, непосредственном предшественнике языка программирования C. [37]

Комментарии к строке

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

В этом примере весь текст от символов ASCII // до конца строки игнорируется.

// ------------------------- // Это текст комментария. // -------------------------

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

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

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

Теги

Программисты могут использовать неформальные теги в комментариях для помощи в индексировании общих проблем. Затем их можно будет искать с помощью обычных инструментов программирования, таких как утилита Unix grep , или даже с помощью подсветки синтаксиса в текстовых редакторах . Иногда их называют «кодовыми тегами» [38] [39] или «токенами», и инструменты разработки могут даже помочь вам в перечислении всех из них. [40]

Такие теги сильно различаются, но могут включать в себя:

Примеры

Сравнение

Типографские соглашения для указания комментариев сильно различаются. Кроме того, отдельные языки программирования иногда предоставляют уникальные варианты.

Ада

В языке программирования 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 ;                 

АПЛ

APL используется для обозначения комментария до конца строки.

Например:

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

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

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

AppleScript

В этом разделе кода AppleScript показаны два стиля комментариев, используемых в этом языке.

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

БАЗОВЫЙ

В этом классическом фрагменте кода раннего BASIC ключевое слово REM ( «Remark» ) используется для добавления комментариев.

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

В более поздних версиях Microsoft BASIC, включая Quick Basic , Q Basic , Visual Basic , Visual Basic .NET и VB Script , а также в таких потомках, как FreeBASIC и Gambas, любой текст в строке после символа ' (апостроф) также рассматривается как комментарий.

Пример на Visual Basic .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    

С

Этот фрагмент кода C демонстрирует использование прологового комментария или «блочного комментария» для описания цели условного оператора . Комментарий объясняет ключевые термины и концепции и включает короткую подпись программиста, который написал код.

 /*  * Проверяем, не превысили ли мы максимальный лимит процессов, но обязательно  * исключим root. Это необходимо, чтобы дать возможность логину и  * друзьям установить лимит процессов для каждого пользователя на что-то меньшее,  * чем количество процессов, запущенных root. -- Rik  */ if ( atomic_read ( & p -> user -> processes ) >= p -> rlim [ RLIMIT_NPROC ]. rlim_cur && ! able ( CAP_SYS_ADMIN ) && ! able ( CAP_SYS_RESOURCE )) goto bad_fork_free ;          

Начиная с C99 также стало возможным использовать синтаксис // из C++, обозначающий однострочный комментарий.


Наличие блочных комментариев позволяет наглядно отмечать структурные нарушения, т.е. допустимые нарушения правила структурного программирования «единственный вход/единственный выход », как в следующем примере:

static Edge edge_any ( Node n , Node m ) { // Возвращает, есть ли ребро между узлами $n и $m. Edge e ; for ( e = n -> sides ; e ; e = e -> next ) { if ( e -> dst == m ) { /*********/ return e ; } } for ( e = m -> sides ; e ; e = e -> next ) { if ( e -> dst == n ) { /*****/ break ; } } return e ; }                                        

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

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

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

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

! Вставьте текст ниже, чтобы вручную перенаправить трафикконфигурация тцелочисленный 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закрытьВыход

Холодный фьюжн

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

Такие комментарии являются вложенными.

 <!--- Это выводит "Hello World" в браузер.  <!--- Это комментарий, используемый внутри первого.  ---> --->  <cfoutput> Hello World < br  />  </cfoutput>

Д

D использует комментарии в стиле C++, а также вложенные многострочные комментарии в стиле D, которые начинаются с «/+» и заканчиваются на «+/».

// Это однострочный комментарий. /* Это многострочный комментарий.*/ /+ Это  /+ вложенный +/  комментарий +/

Фортран IV

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

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

Обратите внимание, что столбцы строки в противном случае рассматриваются как четыре поля: с 1 по 5 — поле метки, 6 приводит к тому, что строка рассматривается как продолжение предыдущего оператора, а объявления и операторы располагаются с 7 по 72.

Фортран 90

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

!* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * Все символы после восклицательного знака считаются комментариями * !* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * program comment_test print '(A)' , 'Hello world' ! В Fortran 90 появилась возможность для встроенных комментариев. end program    

Хаскелл

Строчные комментарии в Haskell начинаются с «--» (два дефиса) до конца строки, а многострочные комментарии начинаются с «{-» и заканчиваются «-}».

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

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

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

Грамотное программирование также может быть выполнено в Haskell, с использованием LaTeX . Окружение кода может быть использовано вместо стиля Ричарда Берда: В стиле LaTeX это эквивалентно приведенному выше примеру, окружение кода может быть определено в преамбуле 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 {}              

Ява

Этот фрагмент кода Java показывает блочный комментарий, используемый для описания setToolTipTextметода. Форматирование соответствует стандартам Sun Microsystems Javadoc . Комментарий предназначен для чтения процессором Javadoc.

/** * Это блочный комментарий в Java. * Метод setToolTipText регистрирует текст для отображения во всплывающей подсказке. * Текст отображается, когда курсор задерживается на компоненте. * * @param text Строка для отображения. Если 'text' равен null, * всплывающая подсказка для этого компонента отключена. */ public void setToolTipText ( String text ) { // Это встроенный комментарий в Java. TODO: Написать код для этого метода. }     

JavaScript

JavaScript использует // для предшествования комментариям и /* */ для многострочных комментариев.

// Однострочный комментарий JavaScript var iNum = 100 ; var iTwo = 2 ; // Комментарий в конце строки /* многострочный комментарий JavaScript */       

Луа

Язык программирования Lua использует двойные дефисы, --, для однострочных комментариев аналогично языкам Ada , Eiffel , Haskell , SQL и VHDL . Lua также имеет блочные комментарии, которые начинаются с --[[и продолжаются до закрывающего]]

Например:

--[[Многострочный длинный комментарий ]] print ( 20 )  -- распечатать результат

Распространенный метод комментирования фрагмента кода [44] заключается в заключении кода между --[[и --]], как показано ниже:

--[[ print(10) --]] -- никаких действий (закомментировано)

В этом случае можно повторно активировать код, добавив один дефис в первую строку:

---[[ печать ( 10 ) --]] --> 10

В первом примере --[[в первой строке начинается длинный комментарий, а два дефиса в последней строке все еще находятся внутри этого комментария. Во втором примере последовательность ---[[начинает обычный однострочный комментарий, так что первая и последняя строки становятся независимыми комментариями. В этом случае printнаходится за пределами комментариев. В этом случае последняя строка становится независимым комментарием, так как начинается с --.

Длинные комментарии в Lua могут быть более сложными, о чем вы можете прочитать в разделе «Длинные строки» книги Программирование в Lua .

МАТЛАБ

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

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

Ним

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

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

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

OCaml

OCaml использует вложенные комментарии, что полезно при комментировании блока кода.

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

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

В Pascal и Delphi комментарии разделяются символами '{ ... }'. Строки комментариев также могут начинаться с '\\'. В качестве альтернативы для компьютеров, которые не поддерживают эти символы, разрешены '(* ... *)'. [46]

В более современной семье языков Никлауса Вирта (включая Modula-2 и Oberon ) комментарии разделяются символами «(* ... *)». [47] [48]

Например:

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

Комментарии могут быть вложенными. // можно включать в {}, а {} можно включать в (**).

Перл

Строчные комментарии в Perl и многих других языках программирования начинаются с символа решетки (#).

# Простой пример # my $s = "Wikipedia" ; # Устанавливает переменную s в "Wikipedia". print $s . "\n" ; # Добавляет символ новой строки после печати        

Вместо обычной конструкции блочного комментирования Perl использует Plain Old Documentation , язык разметки для грамотного программирования , [49] например: [50]

=item Pod::List-E<gt>новый()Создайте новый объект списка. Свойства могут быть указаны через ссылку на хэш, например: мой $list = Pod::List->new({ -start => $., -indent => 4 });Подробную информацию смотрите в описании отдельных методов/свойств.=вырезатьsub new { мой $this = shift ; мой $class = ref ( $this ) || $this ; мой %params = @_ ; мой $self = { %params }; благослови $self , $class ; $self -> инициализировать (); вернуть $self ; }                          

Р

R поддерживает только встроенные комментарии, начинающиеся с символа решетки (#).

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

Раку

Raku (ранее называвшийся Perl 6) использует те же строчные комментарии и комментарии документации POD, что и обычный Perl (см. раздел Perl выше), но добавляет настраиваемый тип блочных комментариев: «многострочные / встроенные комментарии». [51]

Они начинаются с символа решетки, за которым следует обратная кавычка, а затем открывающий символ скобок и заканчиваются соответствующим закрывающим символом скобок. [51] Содержимое может не только занимать несколько строк, но и быть встроенным в строку.

#`{{ "закомментирование" этой версии toggle-case(Str:D $s)Переключает регистр каждого символа в строке: моя Str $toggled-string = toggle-case("МЕНЯ ИМЯ МАЙКЛ!");}}sub  toggle-case ( Str:D  $s ) #`( эта версия скобок используется сейчас ) { ...}

PHP

Комментарии в PHP могут быть в стиле C++ (как встроенные, так и блочные) или использовать хэши. PHPDoc — это стиль, адаптированный из Javadoc, и является общепринятым стандартом для документирования кода PHP.

Начиная с PHP 8, знак # может означать комментарий только в том случае, если за ним не следует сразу '['. В противном случае он будет означать атрибут функции, который выполняется до ']':

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

PowerShell

Комментарии в Windows PowerShell

# Однострочный комментарий Write-Host  "Hello, World!"<# Многострочный  комментарий  #>Напишите-Ведущая  "Прощай, мир!"

Питон

Встроенные комментарии в Python используют символ решетки (#), как в двух примерах в этом коде:

# Эта программа выводит на экран сообщение "Hello World!" ( "Hello World!" )  # Обратите внимание на новый синтаксис

Блочные комментарии, как определено в этой статье, технически не существуют в Python. [52] Можно использовать голый строковый литерал, представленный строкой в ​​тройных кавычках, [53] но он не игнорируется интерпретатором так же, как комментарий "#". [52] В примерах ниже строки в тройных двойных кавычках действуют таким образом как комментарии, но также обрабатываются как строки документации :

""" Предположим, что это файл mymodule.py, тогда эта строка, будучи первым оператором в файле, станет строкой документации модуля "mymodule" при импорте файла. """class  MyClass : """Строка документации класса"""  def  my_method ( self ): """Строка документации метода""" def  my_function (): """Строка документации функции""" 

Рубин

Встроенные комментарии в Ruby начинаются с символа #.

Чтобы создать многострочный комментарий, необходимо поместить "=begin" в начало строки, а затем все до "=end", которое начинает строку, будет игнорироваться. Включение пробела после знака равенства в этом случае вызовет синтаксическую ошибку.

ставит "Это не комментарий" # это комментарийставит "Это не комментарий" =начатьчто бы ни значилось в этих строкахпредназначен только для человеческого читателя=конецставит "Это не комментарий" 

SQL

Стандартные комментарии в SQL представляют собой одну строку с двумя тире:

-- Это однострочный комментарий , за которым следует вторая строка SELECT COUNT ( * ) FROM Authors WHERE Authors . name = 'Smith' ; -- Примечание: нам нужно только 'smith' -- этот комментарий появляется после кода SQL         

В качестве альтернативы синтаксис формата комментариев, идентичный стилю «блочного комментария», используемому в синтаксисе для C и Java, поддерживается Transact-SQL , MySQL , SQLite , PostgreSQL и Oracle . [54] [55] [56] [57] [58]

MySQL также поддерживает комментарии от символа решетки (#) до конца строки.

Быстрый

Однострочные комментарии начинаются с двух косых черт (//):

// Это комментарий.

Многострочные комментарии начинаются с косой черты, за которой следует звездочка (/*), и заканчиваются звездочкой, за которой следует косая черта (*/):

/* Это тоже комментарий , но написанный на нескольких строках. */

Многострочные комментарии в Swift могут быть вложены в другие многострочные комментарии. Вы пишете вложенные комментарии, начиная блок многострочных комментариев, а затем начиная второй многострочный комментарий внутри первого блока. Затем второй блок закрывается, за ним следует первый блок:

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

XML (или HTML)

Комментарии в формате XML (или HTML) вводятся с помощью

< !--

и может распространяться на несколько строк до терминатора,

-->

Например,

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

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

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

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

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

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

  1. ^ Исходный код можно разделить на программный код (состоящий из машинопереводимых инструкций) и комментарии (включающие в себя понятные человеку заметки и другие виды аннотаций в поддержку программного кода). Пенни Грабб, Армстронг Таканг (2003). Software Maintenance: Concepts and Practice . World Scientific. стр. 7, пожалуйста, начните с 120–121. ISBN 978-981-238-426-3.
  2. ^ В целях данной статьи комментарии языка программирования рассматриваются как неотделимые от комментариев, которые появляются в языках разметки , файлах конфигурации и других подобных контекстах. Более того, язык разметки часто тесно интегрирован с кодом языка программирования, особенно в контексте генерации кода . См., например, Ganguli, Madhushree (2002). Making Use of Jsp . New York: Wiley. ISBN 978-0-471-21974-3., Хьюитт, Эбен (2003). Java для разработчиков Coldfusion . Верхняя Седловая река: Pearson Education. ISBN 978-0-13-046180-3.
  3. ^ Диксит, Дж. Б. (2003). Основы информатики и программирование на языке C. Laxmi Publications. ISBN 978-81-7008-882-0.
  4. ^ Хайэм, Десмонд (2005). Руководство MATLAB . SIAM. ISBN 978-0-89871-578-1.
  5. ^ Вермейлен, Эл (2000). Элементы стиля Java. Cambridge University Press. ISBN 978-0-521-77768-1.
  6. ^ abc "Использование правильного комментария в Java". 2000-03-04 . Получено 2007-07-24 .
  7. ^ WR, Dietrich (2003). Прикладное распознавание образов: алгоритмы и реализация на языке C++ . Springer. ISBN 978-3-528-35558-6.предлагает точки зрения на правильное использование комментариев в исходном коде. стр. 66.
  8. ^ ab Keyes, Jessica (2003). Справочник по программной инженерии . CRC Press. ISBN 978-0-8493-1479-7.обсуждает комментарии и «Науку документирования» стр. 256.
  9. ^ abc Элементы стиля программирования , Керниган и Плэугер
  10. ^ ab Код завершен , Макконнелл
  11. ^ Spinellis, Diomidis (2003). Чтение кода: перспектива открытого исходного кода . Addison-Wesley. ISBN 978-0-201-79940-8.
  12. ^ "CodePlotter 1.6 – Добавляйте и редактируйте диаграммы в коде с помощью этого инструмента, похожего на Visio". Архивировано из оригинала 2007-07-14 . Получено 2007-07-24 .
  13. ^ ab Niederst, Jennifer (2006). Веб-дизайн в двух словах: Краткий справочник по настольному компьютеру . O'Reilly. ISBN 978-0-596-00987-8.Иногда разница между «комментарием» и другими элементами синтаксиса языка программирования или разметки влечет за собой тонкие нюансы. Нидерст указывает на одну такую ​​ситуацию, заявляя: «К сожалению, программное обеспечение XML считает комментарии неважной информацией и может просто удалить комментарии из документа перед его обработкой. Чтобы избежать этой проблемы, используйте вместо этого раздел XML CDATA».
  14. ^ См., например, Уинн-Пауэлл, Род (2008). Mac OS X для фотографов: оптимизированный рабочий процесс обработки изображений для пользователей Mac. Оксфорд: Focal Press. стр. 243. ISBN 978-0-240-52027-8.
  15. ^ Лэмб, Линда (1998). Learning the VI Editor. Севастополь: O'Reilly & Associates. ISBN 978-1-56592-426-0.описывает использование синтаксиса модельной строки в файлах конфигурации Vim.
  16. ^ См. например, Берлин, Дэниел (2006). Practical Subversion, Второе издание . Беркли: APress. стр. 168. ISBN 978-1-59059-753-8.
  17. ^ Эмблер, Скотт (2004). Объектный учебник: гибкая разработка на основе моделей с использованием UML 2.0 . Издательство Кембриджского университета. ISBN 978-1-397-80521-8.
  18. ^ Определение функции с помощью docstring в Clojure
  19. ^ Murach. C# 2005. стр. 56.
  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. ^ Кен Томпсон. "Ссылка пользователей на B" . Получено 21 июля 2017 г.
  38. ^ "PEP 0350 – Codetags", Python Software Foundation
  39. ^ «Никогда ничего не забывайте до, после и во время кодирования», использование комментариев «codetag» в качестве продуктивных остатков
  40. ^ «Использование списка задач», msdn.microsoft.com
  41. ^ "Оставьте комментарий в running-config". Cisco Learning Network (форум для обсуждения) .
  42. ^ «Руководство по управлению файлами конфигурации, Cisco IOS XE Release 3S (серия ASR 900)».
  43. ^ "Грамотное программирование". haskell.org .
  44. ^ "Программирование на Lua 1.3". www.Lua.org . Получено 2017-11-08 .
  45. ^ макросы.extractDocCommentsAndRunnables
  46. ^ Кэтлин Дженсен, Никлаус Вирт (1985). Руководство пользователя и отчет Pascal . Спрингер-Верлаг. ISBN 0-387-96048-1.
  47. ^ Никлаус Вирт (1983). Программирование в Модуле-2 . Спрингер-Верлаг. ISBN 0-387-15078-1.
  48. ^ * Мартин Райзер, Никлаус Вирт (1992). Программирование на языке Oberon . Addison-Wesley. ISBN 0-201-56543-9.
  49. ^ "perlpod – простой старый формат документации" . Получено 2011-09-12 .
  50. ^ "Pod::ParseUtils – помощники для анализа и преобразования POD" . Получено 12 сентября 2011 г.
  51. ^ ab "Perl 6 Documentation – Syntax (Comments)" . Получено 2017-04-06 .
  52. ^ ab "Python 3 Basic Syntax". Архивировано из оригинала 19 августа 2021 г. Получено 25 февраля 2019 г. Тройные кавычки обрабатываются как обычные строки, за исключением того, что они могут охватывать несколько строк. Под обычными строками я подразумеваю, что если они не назначены переменной, то они будут немедленно удалены сборщиком мусора, как только этот код выполнится. Следовательно, они не игнорируются интерпретатором так же, как комментарий #a.
  53. ^ «Совет по Python: вы можете использовать многострочные строки в качестве многострочных комментариев», 11 сентября 2011 г., Гвидо ван Россум
  54. ^ Талмейдж, Рональд Р. (1999). Microsoft SQL Server 7. Prima Publishing. ISBN 978-0-7615-1389-6.
  55. ^ "MySQL 8.0 Reference Manual". Oracle Corporation . Получено 2 января 2020 г.
  56. ^ "SQL As Understand By SQLite". SQLite Consortium . Получено 2 января 2020 г.
  57. ^ "PostgreSQL 10.11 Documentation". PostgreSQL Global Development Group . Получено 2 января 2020 г.
  58. ^ "Oracle® Database SQL Reference". Oracle Corporation . Получено 2 января 2020 г.
  59. ^ Андресс, Мэнди (2003). Выживание в безопасности: как интегрировать людей, процессы и технологии . CRC Press. ISBN 978-0-8493-2042-2.

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

Внешние ссылки