Comment (computer programming)

(Redirected fromREM (BASIC))

Incomputer programming,acommentis ahuman-readableexplanation orannotationin thesource codeof acomputer program.They are added with the purpose of making the source code easier for humans to understand, and are generally ignored bycompilersandinterpreters.[1][2]Thesyntax of commentsin various programming languages varies considerably.

An illustration ofJavasource code withprologuecomments indicated inredandinlinecomments ingreen.Program codeis inblue.

Comments are sometimes also processed in various ways to generate documentation external to the source code itself bydocumentation generators,or used for integration withsource code managementsystems and other kinds of externalprogramming tools.

The flexibility provided by comments allows for a wide degree of variability, but formal conventions for their use are commonly part ofprogramming styleguides.

Overview

edit

Comments are generally formatted as eitherblock comments(also calledprologue commentsorstream comments) orline comments(also calledinline comments).[3]

Block commentsdelimita region of source code which may span multiple lines or a part of a single line. This region is specified with astartdelimiter and anenddelimiter. Some programming languages (such asMATLAB) allow block comments to be recursively nested inside one another, but others (such asJava) do not.[4][5][6]

Line comments either start with a comment delimiter and continue until the end of the line, or in some cases, start at a specific column (character line offset) in the source code, and continue until the end of the line.[6]

Some programming languages employ both block and line comments with different comment delimiters. For example,C++has block comments delimited by/*and*/that can span multiple lines and line comments delimited by//.Other languages support only one type of comment. For example,Adacomments are line comments: they start with--and continue to the end of the line.[6]

Uses

edit

How best to make use of comments is subject to dispute; different commentators have offered varied and sometimes opposing viewpoints.[7][8] There are many different ways of writing comments and many commentators offer conflicting advice.[8]

Planning and reviewing

edit

Comments can be used as a form ofpseudocodeto outline intention prior to writing the actual code. In this case it should explain the logic behind the code rather than the code itself.

/* loop backwards through all elements returned by the server
(they should be processed chronologically)*/
for(i=(numElementsReturned-0);i>=1;i--){
/* process each element's data */
updatePattern(i,returnedElements[i]);
}

If this type of comment is left in, it simplifies the review process by allowing a direct comparison of the code with the intended results. A common logical fallacy is that code that is easy to understand does what it'ssupposedto do.

Code description

edit

Comments can be used to summarize code or to explain the programmer's intent. According to this school of thought, restating the code in plain English is considered superfluous; the need to re-explain code may be a sign that it is too complex and should be rewritten, or that the naming is bad.

"Don't document bad code – rewrite it."[9]
"Good comments don't repeat the code or explain it. They clarify its intent. Comments should explain, at a higher level of abstraction than the code, what you're trying to do."[10]

Comments may also be used to explain why a block of code does not seem to fit conventions or best practices. This is especially true of projects involving very little development time, or in bug fixing. For example:

' Second variable dim because of server errors produced when reuse form data. No
' documentation available on server behavior issue, so just coding around it.
vtx=server.mappath("local settings")

Algorithmic description

edit

Sometimes source code contains a novel or noteworthy solution to a specific problem. In such cases, comments may contain an explanation of the methodology. Such explanations may include diagrams and formal mathematical proofs. This may constitute explanation of the code, rather than a clarification of its intent; but others tasked with maintaining the code base may find such explanation crucial. This might especially be true in the case of highly specialized problem domains; or rarely used optimizations, constructs or function-calls.[11]

For example, a programmer may add a comment to explain why aninsertion sortwas chosen instead of aquicksort,as the former is, in theory, slower than the latter. This could be written as follows:

list=[f(b),f(b),f(c),f(d),f(a),...];
// Need a stable sort. Besides, the performance really does not matter.
insertion_sort(list);

Resource inclusion

edit

Logos,diagrams, andflowchartsconsisting ofASCII artconstructions can be inserted into source code formatted as a comment.[12]Further,copyrightnotices can be embedded within source code as comments. Binary data may also be encoded in comments through a process known asbinary-to-text encoding,although such practice is uncommon and typically relegated to external resource files.

The following code fragment is a simple ASCII diagram depicting the process flow for asystem administrationscript contained in aWindows Script Filerunning underWindows Script Host.Although a section marking the code appears as a comment, the diagram itself actually appears in anXMLCDATAsection, which is technically considered distinct from comments, but can serve similar purposes.[13]

<!-- begin: wsf_resource_nodes -->
<resourceid="ProcessDiagram000">
<![CDATA[
HostApp (Main_process)
|
V
script.wsf (app_cmd) --> ClientApp (async_run, batch_process)
|
|
V
mru.ini (mru_history)
]]>
</resource>

Although this identical diagram could easily have been included as a comment, the example illustrates one instance where a programmer may opt not to use comments as a way of including resources in source code.[13]

Metadata

edit

Comments in a computer program often store metadata about a program file.

In particular, manysoftware maintainersput submission guidelines in comments to help people who read the source code of that program to send any improvements they make back to the maintainer.

Other metadata includes: the name of the creator of the original version of the program file and the date when the first version was created, the name of the current maintainer of the program, the names of other people who have edited the program file so far, the URL of documentation about how to use the program, the name of thesoftware licensefor this program file, etc.

When an algorithm in some section of the program is based on a description in a book or other reference, comments can be used to give the page number and title of the book orRequest for Commentsor other reference.

Debugging

edit

A common developer practice is tocomment outa code snippet, meaning to add comment syntax causing that block of code to become a comment, so that it will not be executed in the final program. This may be done to exclude certain pieces of code from the final program, or (more commonly) it can be used to find the source of an error. By systematically commenting out and running parts of the program, the source of an error can be determined, allowing it to be corrected.

Many IDEs allow quick adding or removing such comments with single menu options or key combinations. The programmer has only to mark the part of text they want to (un)comment and choose the appropriate option.

Automatic documentation generation

edit

Programming toolssometimes store documentation andmetadatain comments.[14]These may include insert positions for automatic header file inclusion, commands to set the file'ssyntax highlightingmode,[15]or the file'srevision number.[16]These functional control comments are also commonly referred to asannotations.Keeping documentation within source code comments is considered as one way to simplify the documentation process, as well as increase the chances that the documentation will be kept up to date with changes in the code.[17]

Examples of documentation generators include the programsJavadocfor use withJava,DdocforD,DoxygenforC,C++,Java,IDL,Visual ExpertforPL/SQL,Transact-SQL,PowerBuilder,andPHPDocforPHP.Forms ofdocstringare supported byPython,Lisp,Elixir,andClojure.[18]

C#,F#andVisual Basic.NETimplement a similar feature called "XML Comments" which are read byIntelliSensefrom the compiled.NETassembly.[19]

Syntax extension

edit

Occasionally syntax elements that were originally intended to be comments are re-purposed to convey additional information to a program, such as "conditional comments". Such" hot comments "may be the only practical solution that maintains backward-compatibility, but are widely regarded as akludge.[20]

One specific example aredocblocks,which are specially-formatted comments used to document a specific segment of code. This makes the DocBlock format independent of the target language (as long as it supports comments); however, it may also lead to multiple or inconsistent standards.

Directive uses

edit

There are cases where the normal comment characters are co-opted to create a specialdirectivefor an editor or interpreter.

Two examples of this directing an interpreter are:

  • The Unix "shebang"–#!– used on the first line of a script to point to the interpreter to be used.
  • "Magic comments" identifying the encoding a source file is using,[21]e.g. Python's PEP 263.[22]

The script below for a Unix-like system shows both of these uses:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
print("Testing")

Somewhat similar is the use of comments in C to communicate to a compiler that a default "fallthrough" in acase statementhas been done deliberately:

switch(command){
caseCMD_SHOW_HELP_AND_EXIT:
do_show_help();
/* Fall thru */
caseCMD_EXIT:
do_exit();
break;
caseCMD_OTHER:
do_other();
break;
/*... etc.... */
}

Inserting such a/* Fall thru */comment for human readers was already a common convention, but in 2017 thegcccompiler began looking for these (or other indications of deliberate intent), and, if not found, emitting: "warning: this statement may fall through".[23]

Many editors andIDEswill read specially formatted comments. For example, the "modeline" feature ofVim;which would change its handling of tabs while editing a source with this comment included near the top of the file:

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

Stress relief

edit

Sometimes programmers will add comments as a way to relieve stress by commenting about development tools, competitors, employers, working conditions, or the quality of the code itself.[24]The occurrence of this phenomenon can be easily seen from online resources that trackprofanityin source code.[25]

Normative views

edit

There are various normative views and long-standing opinions regarding the proper use of comments in source code.[26][27]Some of these are informal and based on personal preference, while others are published or promulgated as formal guidelines for a particular community.[28]

Need for comments

edit

Experts have varying viewpoints on whether, and when, comments are appropriate in source code.[9][29]Some assert that source code should be written with few comments, on the basis that the source code should be self-explanatory orself-documenting.[9]Others suggest code should be extensively commented (it is not uncommon for over 50% of the non-whitespacecharacters in source code to be contained within comments).[30][31]

In between these views is the assertion that comments are neither beneficial nor harmful by themselves, and what matters is that they are correct and kept in sync with the source code, and omitted if they are superfluous, excessive, difficult to maintain or otherwise unhelpful.[32][33]

Comments are sometimes used to document contracts in thedesign by contractapproach to programming.

Level of detail

edit

Depending on the intended audience of the code and other considerations, the level of detail and description may vary considerably.

For example, the following Java comment would be suitable in an introductory text designed to teach beginning programming:

Strings="Wikipedia";/* Assigns the value "Wikipedia" to the variable s. */

This level of detail, however, would not be appropriate in the context of production code, or other situations involving experienced developers. Such rudimentary descriptions are inconsistent with the guideline: "Good comments... clarify intent."[10]Further, for professional coding environments, the level of detail is ordinarily well defined to meet a specific performance requirement defined by business operations.[31]

Styles

edit

There are many stylistic alternatives available when considering how comments should appear in source code. For larger projects involving a team of developers, comment styles are either agreed upon before a project starts, or evolve as a matter of convention or need as a project grows. Usually programmers prefer styles that are consistent, non-obstructive, easy to modify, and difficult to break.[34]

Block comment

edit

The following code fragments in C demonstrate just a tiny example of how comments can vary stylistically, while still conveying the same basic information:

/*
This is the comment body.
Variation One.
*/
/***************************\
* *
* This is the comment body. *
* Variation Two. *
* *
\***************************/

Factors such as personal preference, flexibility of programming tools, and other considerations tend to influence the stylistic variants used in source code. For example, Variation Two might be disfavored among programmers who do not havesource code editorsthat can automate the alignment and visual appearance of text in comments.

Software consultant and technology commentatorAllen Holub[35]is one expert who advocates aligning the left edges of comments:[36]

/* This is the style recommended by Holub for C and C++.
* It is demonstrated in ''Enough Rope'', in rule 29.
*/
/* This is another way to do it, also in C.
** It is easier to do in editors that do not automatically indent the second
** through last lines of the comment one space from the first.
** It is also used in Holub's book, in rule 31.
*/

The use of /* and */ as block comment delimiters was inherited from PL/I into the B programming language, the immediate predecessor of the C programming language.[37]

Line comments

edit

Line comments generally use an arbitrarydelimiteror sequence oftokensto indicate the beginning of a comment, and anewlinecharacter to indicate the end of a comment.

In this example, all the text from the ASCII characters // to the end of the line is ignored.

// -------------------------
// This is the comment body.
// -------------------------

Often such a comment has to begin at far left and extend to the whole line. However, in many languages, it is also possible to put a commentinlinewith a command line, to add a comment to it – as in this Perl example:

print$s."\n";# Add a newline character after printing

If a language allows both line comments and block comments, programming teams may decide upon a convention of using them differently: e.g. line comments only for minor comments, and block comments to describe higher-level abstractions.

Tags

edit

Programmers may use informaltagsin comments to assist in indexing common issues. They may then be able to be searched for with common programming tools, such as theUnixgreputility or evensyntax-highlightedwithintext editors.These are sometimes referred to as "codetags"[38][39]or "tokens", and the development tools might even assist you in listing all of them.[40]

Such tags differ widely, but might include:

  • BUG, DEBUG — a knownbugthat should be corrected.
  • FIXME — should be corrected.
  • HACK, BODGE, KLUDGE — a workaround.
  • TODO — something to be done.
  • NOTE — used to highlight especially notablegotchas.
  • UNDONE — a reversal or "roll back" of previous code.
  • XXX — warn other programmers of problematic or misguiding code

Examples

edit

Comparison

edit

Typographic conventions to specify comments vary widely. Further, individual programming languages sometimes provide unique variants.

TheAdaprogramming language uses '--' to indicate a comment up to the end of the line.

For example:

-- the air traffic controller task takes requests for takeoff and landing
tasktypeController(My_Runway:Runway_Access)is
-- task entries for synchronous message passing
entryRequest_Takeoff(ID:inAirplane_ID;Takeoff:outRunway_Access);
entryRequest_Approach(ID:inAirplane_ID;Approach:outRunway_Access);
endController;

APLusesto indicate a comment up to the end of the line.

For example:

⍝ Now add the numbers:
ca+b⍝ addition

In dialects that have the( "left" ) and( "right" ) primitives, comments can often beinsideor separate statements, in the form of ignored strings:

d2×c'where'ca+'bound'b

AppleScript

edit

This section ofAppleScriptcode shows the two styles of comments used in that language.

(*
This program displays a greeting.
*)
ongreet(myGreeting)
display dialogmyGreeting&"world!"
endgreet

-- Show the greeting
greet("Hello")

BASIC

edit

In this classic earlyBASICcode fragment the REM ("Remark") keyword is used to add comments.

10REM This BASIC program shows the use of the PRINT and GOTO Statements.
15REM It fills the screen with the phrase "HELLO"
20PRINT"HELLO"
30GOTO20

In laterMicrosoftBASICs, includingQuick Basic,Q Basic,Visual Basic,Visual Basic.NET,andVB Script;and in descendants such asFreeBASICandGambasany text on a line after an ' (apostrophe) character is also treated as a comment.

An example in Visual Basic.NET:

PublicClassForm1
PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.Click
' The following code is executed when the user
' clicks the button in the program's window.
rem comments still exist.

MessageBox.Show("Hello, World")'Show a pop-up window with a greeting
EndSub
EndClass

ThisCcode fragment demonstrates the use of a prologue comment or "block comment" to describe the purpose of aconditional statement.The comment explains key terms and concepts, and includes a short signature by the programmer who authored the code.

/*
* Check if we are over our maximum process limit, but be sure to
* exclude root. This is needed to make it possible for login and
* friends to set the per-user process limit to something lower
* than the amount of processes root is running. -- Rik
*/
if(atomic_read(&p->user->processes)>=p->rlim[RLIMIT_NPROC].rlim_cur
&&!capable(CAP_SYS_ADMIN)&&!capable(CAP_SYS_RESOURCE))
gotobad_fork_free;

Since C99, it has also been possible to use the // syntax from C++, indicating a single-line comment.


The availability of block comments allows for marking structural breakouts, i.e. admissible violations of the single-entry/single-exit rule ofStructured Programming,visibly, like in the following example:

staticEdgeedge_any(Noden,Nodem){
// Returns whether any edge is between nodes $n and $m.
Edgee;
for(e=n->edges;e;e=e->next){
if(e->dst==m){
/*********/returne;}}
for(e=m->edges;e;e=e->next){
if(e->dst==n){
/*****/break;}}
returne;}

In many languages lacking a block comment, e.g.awk,you can use sequences of statement separators like;instead. But it's impossible in languages using indentation as a rigid indication of intended block structure, likePython.

Cisco IOS and IOS-XE configuration

edit

Theexclamation point(!) may be used to mark comments in a Cisco router's configuration mode, however such comments arenotsaved tonon-volatile memory(which contains the startup-config), nor are they displayed by the "show run" command.[41][42]

It is possible to inserthuman-readablecontent that is actually part of the configuration, and may be saved to theNVRAMstartup-config via:

  • The "description" command, used to add a description to the configuration of an interface or of aBGPneighbor
  • The "name" parameter, to add a remark to a static route
  • The "remark" command in access lists
!Paste the text below to reroute traffic manually
config t
int gi0/2
no shut
ip route 0.0.0.0 0.0.0.0 gi0/2 name ISP2
no ip route 0.0.0.0 0.0.0.0 gi0/1 name ISP1
int gi0/1
shut
exit

ColdFusion

edit

ColdFusionuses comments similar toHTML comments,but instead of two dashes, it uses three. These comments are caught by the ColdFusion engine and not printed to the browser.

Such comments are nestable.

<!--- This prints "Hello World" to the browser.
<!--- This is a comment used inside the first one.
--->
--->
<cfoutput>
Hello World<br/>
</cfoutput>

Duses C++-style comments, as well as nestable D-style multiline comments, which start with '/+' and end with '+/'.

// This is a single-line comment.
/* This is a multiline comment.

*/
/+ This is a
/+ nested +/
comment +/

Fortran IV

edit

ThisFortran IVcode fragment demonstrates how comments are used in that language, which is very column-oriented. A letter "C" in column 1 causes the entire line to be treated as a comment.

C
C Lines that begin with 'C' (in the first or 'comment' column) are comments
C
WRITE(6,610)
610FORMAT(12HHELLOWORLD)
END

Note that the columns of a line are otherwise treated as four fields: 1 to 5 is the label field, 6 causes the line to be taken as a continuation of the previous statement; and declarations and statements go in 7 to 72.

Fortran 90

edit

ThisFortrancode fragment demonstrates how comments are used in that language, with the comments themselves describing the basic formatting rules.

!* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!* All characters after an exclamation mark are considered as comments *
!* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
programcomment_test
print'(A)','Hello world'!Fortran 90 introduced the option for inline comments.
end program

Haskell

edit

Line comments in Haskell start with '--' (two hyphens) until the end of line, and multiple line comments start with '{-' and end with '-}'.

{- this is a comment
on more lines -}
-- and this is a comment on one line
putStrLn"Wikipedia"-- this is another comment

Haskell also provides aliterate programmingmethod of commenting known as "Bird Style".[43]In this all lines starting with > are interpreted as code, everything else is considered a comment. One additional requirement is that you always leave a blank line before and after the code block:

In Bird-style you have to leave a blank before the code.

>fact::Integer->Integer
>fact0=1
>fact(n+1)=(n+1)*factn

And you have to leave a blank line after the code as well.

Literate programming can also be done in Haskell, usingLaTeX.The code environment can be used instead of the Richard Bird's style: InLaTeXstyle this is equivalent to the above example, the code environment could be defined in the LaTeX preamble. Here is a simple definition:

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

later in

% the LaTeX source file
The\verb|fact n| function call computes$n!$if$n\ge0$,here is a definition:\\
\begin{code}
fact::Integer->Integer
fact0=1
fact(n+1)=(n+1)*factn
\end{code}
Here more explanation using\LaTeX{}markup

Java

edit

ThisJavacode fragment shows a block comment used to describe thesetToolTipTextmethod. The formatting is consistent withSun MicrosystemsJavadocstandards. The comment is designed to be read by the Javadoc processor.

/**
* This is a block comment in Java.
* The setToolTipText method registers the text to display in a tool tip.
* The text is displayed when the cursor lingers over the component.
*
* @param text The string to be displayed. If 'text' is null,
* the tool tip is turned off for this component.
*/
publicvoidsetToolTipText(Stringtext){
// This is an inline comment in Java. TODO: Write code for this method.
}

JavaScript

edit

JavaScriptuses // to precede comments and /* */ for multi-line comments.

// A single line JavaScript comment
variNum=100;
variTwo=2;// A comment at the end of line
/*
multi-line
JavaScript comment
*/

TheLuaprogramming language uses double-hyphens,--,for single line comments in a similar way toAda,Eiffel,Haskell,SQLandVHDLlanguages. Lua also has block comments, which start with--[[and run until a closing]]

For example:

--[[A multi-line
long comment
]]
print(20)-- print the result

A common technique to comment out a piece of code,[44]is to enclose the code between--[[and --]],as below:

--[[
print(10)
--]]
-- no action (commented out)

In this case, it's possible to reactivate the code by adding a single hyphen to the first line:

---[[
print(10)
--]]
--> 10

In the first example, the--[[in the first line starts a long comment, and the two hyphens in the last line are still inside that comment. In the second example, the sequence---[[starts an ordinary, single-line comment, so that the first and the last lines become independent comments. In this case, theprintis outside comments. In this case, the last line becomes an independent comment, as it starts with--.

Long comments in Lua can be more complex than these, as you can read in the section called "Long strings" c.f.Programming in Lua.

MATLAB

edit

InMATLAB's programming language, the '%' character indicates a single-line comment. Multi line comments are also available via %{ and %} brackets and can be nested, e.g.

% These are the derivatives for each term
d=[0-10];

%{
%{
(Example of a nested comment, indentation is for cosmetics (and ignored).)
%}
Weformthesequence,followingtheTaylorformula.
Notethatwe'reoperatingonavector.
%}
seq=d.*(x-c).^n./(factorial(n))

% We add-up to get the Taylor approximation
approx=sum(seq)

Nimuses the '#' character for inline comments. Multi-line block comments are opened with '#[' and closed with ']#'. Multi-line block comments can be nested.

Nim also has documentation comments that use mixedMarkdownandReStructuredTextmarkups. The inline documentation comments use '##' and multi-line block documentation comments are opened with '##[' and closed with ']##'. The compiler can generateHTML,LaTeXandJSONdocumentation from the documentation comments. Documentation comments are part of theabstract syntax treeand can be extracted using macros.[45]

## Documentation of the module *ReSTructuredText* and **MarkDown**
# This is a comment, but it is not a documentation comment.

typeKitten=object## Documentation of type
age:int## Documentation of field

procpurr(self:Kitten)=
## Documentation of function
echo"Purr Purr"# This is a comment, but it is not a documentation comment.

# This is a comment, but it is not a documentation comment.

OCaml

edit

OCamluses nestable comments, which is useful when commenting a code block.

codeLine(* comment level 1(*comment level 2*)*)

Pascal, Delphi

edit

InPascalandDelphi,comments are delimited by '{... }'. Comment lines can also start with '\\'. As an alternative, for computers that do not support these characters, '(*... *)' are allowed.[46]

InNiklaus Wirth's more modern family of languages (includingModula-2andOberon), comments are delimited by '(*... *)'.[47][48]

For example:

(* test diagonals *)
columnDifference:=testColumn-column;
if(row+columnDifference=testRow)or
.......

Comments can be nested. // can be included in a {} and {} can be included in a (**).

Perl

edit

Line comments inPerl,and many otherscripting languages,begin with a hash (#) symbol.

# A simple example
#
my$s="Wikipedia";# Sets the variable s to "Wikipedia".
print$s."\n";# Add a newline character after printing

Instead of a regular block commenting construct, Perl usesPlain Old Documentation,a markup language forliterate programming,[49]for instance:[50]

=item Pod::List-E<gt>new()

Create a new list object. Properties may be specified through a hash
reference like this:

my $list = Pod::List->new({ -start => $., -indent => 4 });

See the individual methods/properties for details.

=cut

subnew{
my$this=shift;
my$class=ref($this)||$this;
my%params=@_;
my$self={%params};
bless$self,$class;
$self->initialize();
return$self;
}

Ronly supports inline comments started by the hash (#) character.

# This is a comment
print("This is not a comment")# This is another comment

Raku

edit

Raku(previously called Perl 6) uses the same line comments and POD Documentation comments as regularPerl(see Perl section above), but adds a configurable block comment type: "multi-line / embedded comments".[51]

These start with a hash character, followed by a backtick, and then some opening bracketing character, and end with the matching closing bracketing character.[51]The content can not only span multiple lines, but can also be embedded inline.

#`{{ "commenting out" this version
toggle-case(Str:D $s)

Toggles the case of each character in a string:

my Str $toggled-string = toggle-case( "mY NAME IS mICHAEL!" );

}}

subtoggle-case(Str:D$s)#`( this version of parens is used now ){
...
}

Comments inPHPcan be either in C++ style (both inline and block), or use hashes.PHPDocis a style adapted from Javadoc and is a common standard for documenting PHP code.

Starting in PHP 8, the # sign can only mean a comment if it's not immediately followed by '['. Otherwise, it will mean a function attribute, which runs until ']':

/**
* This class contains a sample documentation.
*
* @author Unknown
*/
#[Attribute]
classMyAttribute{
constVALUE='value';
// This is an inline comment. It starts with '//', like in C++.
private$value;
# This is a Unix-style inline comment, which starts with '#'.
publicfunction__construct($value=null){
$this->value=$value;
}
/*
This is a multiline comment.

These comments cannot be nested.
*/

}

PowerShell

edit

Comments inWindows PowerShell

# Single line comment
Write-Host"Hello, World!"

<# Multi
Line
Comment #>

Write-Host"Goodbye, world!"

Python

edit

Inline comments inPythonuse the hash (#) character, as in the two examples in this code:

# This program prints "Hello World" to the screen
print("Hello World!")# Note the new syntax

Block comments, as defined in this article, do not technically exist in Python.[52]A barestring literalrepresented by a triple-quoted string can be used,[53]but is not ignored by the interpreter in the same way that "#" comment is.[52]In the examples below, the triple double-quoted strings act in this way as comments, but are also treated asdocstrings:

"""
Assuming this is file mymodule.py, then this string, being the
first statement in the file, will become the "mymodule" module's
docstring when the file is imported.
"""

classMyClass:
"""The class's docstring" ""

defmy_method(self):
"""The method's docstring" ""

defmy_function():
"""The function's docstring" ""

Ruby

edit

Inline comments inRubystart with the # character.

To create a multiline comment, one must place "=begin" at the start of a line, and then everything until "=end" that starts a line is ignored. Including a space after the equals sign in this case throws a syntax error.

puts"This is not a comment"

# this is a comment

puts"This is not a comment"

=begin

whatever goes in these lines

is just for the human reader

=end

puts"This is not a comment"

Standard comments in SQL are in single-line-only form, using two dashes:

-- This is a single line comment
-- followed by a second line
SELECTCOUNT(*)
FROMAuthors
WHEREAuthors.name='Smith';-- Note: we only want 'smith'
-- this comment appears after SQL code

Alternatively, a comment format syntax identical to the "block comment" style used in the syntax for C and Java is supported byTransact-SQL,MySQL,SQLite,PostgreSQL,andOracle.[54][55][56][57][58]

MySQL also supports comments from the hash (#) character to the end of the line.

Swift

edit

Single-line comments begin with two forward-slashes (//):

// This is a comment.

Multiline comments start with a forward-slash followed by an asterisk (/*) and end with an asterisk followed by a forward-slash (*/):

/* This is also a comment
but is written over multiple lines. */

Multiline comments in Swift can be nested inside other multiline comments. You write nested comments by starting a multiline comment block and then starting a second multiline comment within the first block. The second block is then closed, followed by the first block:

/* This is the start of the first multiline comment.
/* This is the second, nested multiline comment. */
This is the end of the first multiline comment. */

XML (or HTML)

edit

Comments inXML(or HTML) are introduced with

<!--

and can spread over several lines until the terminator,

-->

For example,

<!-- select the context here -->
<paramname="context"value="public"/>

For compatibility withSGML,the string "--" (double-hyphen) is not allowed inside comments.

Security issues

edit

Ininterpreted languagesthe comments are viewable to the end user of the program. In some cases, such as sections of code that are "commented out", this may present a securityvulnerability.[59]

See also

edit

Notes and references

edit
  1. ^Source code can be divided intoprogram code(which consists of machine-translatable instructions); andcomments(which include human-readable notes and other kinds of annotations in support of the program code).Penny Grubb, Armstrong Takang (2003).Software Maintenance: Concepts and Practice.World Scientific. pp. 7, plese start120–121.ISBN978-981-238-426-3.
  2. ^For purposes of this article, programming language comments are treated as indistinct from comments that appear inmarkup languages,configuration filesand other similar contexts. Moreover, markup language is often closely integrated with programming language code, especially in the context ofcode generation.See e.g.,Ganguli, Madhushree (2002).Making Use of Jsp.New York: Wiley.ISBN978-0-471-21974-3.,Hewitt, Eben (2003).Java for Coldfusion Developers.Upper Saddle River: Pearson Education.ISBN978-0-13-046180-3.
  3. ^Dixit, J.B. (2003).Computer Fundamentals and Programming in C.Laxmi Publications.ISBN978-81-7008-882-0.
  4. ^Higham, Desmond (2005).MATLAB Guide.SIAM.ISBN978-0-89871-578-1.
  5. ^Vermeulen, Al (2000).The Elements of Java Style.Cambridge University Press.ISBN978-0-521-77768-1.
  6. ^abc"Using the right comment in Java".2000-03-04.Retrieved2007-07-24.
  7. ^W. R., Dietrich (2003).Applied Pattern Recognition: Algorithms and Implementation in C++.Springer.ISBN978-3-528-35558-6.offers viewpoints on proper use of comments in source code. p. 66.
  8. ^abKeyes, Jessica (2003).Software Engineering Handbook.CRC Press.ISBN978-0-8493-1479-7.discusses comments and the "Science of Documentation" p. 256.
  9. ^abcThe Elements of Programming Style,Kernighan&Plauger
  10. ^abCode Complete,McConnell
  11. ^Spinellis, Diomidis (2003).Code reading: The Open Source Perspective.Addison-Wesley.ISBN978-0-201-79940-8.
  12. ^"CodePlotter 1.6 – Add and edit diagrams in your code with this 'Visio-like' tool".Archived fromthe originalon 2007-07-14.Retrieved2007-07-24.
  13. ^abNiederst, Jennifer (2006).Web Design in a Nutshell: A Desktop Quick Reference.O'Reilly.ISBN978-0-596-00987-8.Sometimes the difference between a "comment" and other syntax elements of a programming or markup language entails subtle nuances. Niederst indicates one such situation by stating: "Unfortunately, XML software thinks of comments as unimportant information and may simply remove the comments from a document before processing it. To avoid this problem, use an XML CDATA section instead."
  14. ^See e.g.,Wynne-Powell, Rod (2008).Mac OS X for Photographers: Optimized Image Workflow for the Mac User.Oxford: Focal Press. p. 243.ISBN978-0-240-52027-8.
  15. ^Lamb, Linda (1998).Learning the VI Editor.Sebastopol: O'Reilly & Associates.ISBN978-1-56592-426-0.describes the use of modeline syntax in Vim configuration files.
  16. ^See e.g.,Berlin, Daniel (2006).Practical Subversion, Second Edition.Berkeley: APress. p. 168.ISBN978-1-59059-753-8.
  17. ^Ambler, Scott (2004).The Object Primer: Agile Model-Driven Development with UML 2.0.Cambridge University Press.ISBN978-1-397-80521-8.
  18. ^Function definition with docstring in Clojure
  19. ^Murach.C# 2005.p. 56.
  20. ^c2: HotComments
  21. ^"class Encoding".Ruby.ruby-lang.org.Retrieved5 December2018.
  22. ^"PEP 263 – Defining Python Source Code Encodings".Python.org.Retrieved5 December2018.
  23. ^Polacek, Marek (2017-03-10)."-Wimplicit-fallthrough in GCC 7".Red Hat Developer.Red Hat.Retrieved10 February2019.
  24. ^Lisa Eadicicco (27 March 2014)."Microsoft Programmers Hid A Bunch Of Profanity In Early Software Code".Business Insider Australia.Archivedfrom the original on 29 December 2016.
  25. ^(see e.g.,Linux Swear Count).
  26. ^Goodliffe, Pete (2006).Code Craft.San Francisco: No Starch Press.ISBN978-1-59327-119-0.
  27. ^Smith, T. (1991).Intermediate Programming Principles and Techniques Using Pascal.Belmont: West Pub. Co.ISBN978-0-314-66314-6.
  28. ^See e.g.,Koletzke, Peter (2000).Oracle Developer Advanced Forms & Reports.Berkeley: Osborne/McGraw-Hill.ISBN978-0-07-212048-6.page 65.
  29. ^"Worst Practice - Bad Comments".Retrieved2007-07-24.
  30. ^Morelli, Ralph (2006).Java, Java, Java: object-oriented problem solving.Prentice Hall College.ISBN978-0-13-147434-5.
  31. ^ab"How to Write Doc Comments for the Javadoc Tool".Retrieved2007-07-24.Javadoc guidelines specify that comments are crucial to the platform. Further, the appropriate level of detail is fairly well-defined: "We spend time and effort focused on specifying boundary conditions, argument ranges and corner cases rather than defining common programming terms, writing conceptual overviews, and including examples for developers."
  32. ^Yourdon, Edward (2007).Techniques of Program Structure and Design.University of Michigan. 013901702X.Non-existent comments can make it difficult to comprehend code, but comments may be detrimental if they are obsolete, redundant, incorrect or otherwise make it more difficult to comprehend the intended purpose for the source code.
  33. ^Dewhurst, Stephen C (2002).C++ Gotchas: Avoiding Common Problems in Coding and Design.Addison-Wesley Professional.ISBN978-0-321-12518-7.
  34. ^"Coding Style".Archived fromthe originalon 2007-08-08.Retrieved2007-07-24.
  35. ^"Allen Holub".Archived fromthe originalon 2007-07-20.Retrieved2007-07-24.
  36. ^Allen Holub,Enough Rope to Shoot Yourself in the Foot,ISBN0-07-029689-8,1995, McGraw-Hill
  37. ^ Ken Thompson."Users' Reference to B".Retrieved2017-07-21.
  38. ^"PEP 0350 – Codetags",Python Software Foundation
  39. ^"Never Forget Anything Before, After and While Coding",Using "codetag" comments as productive remainders
  40. ^"Using the Task List",msdn.microsoft.com
  41. ^"Leave a comment in running-config".Cisco Learning Network (discussion forum).
  42. ^"Managing Configuration Files Configuration Guide, Cisco IOS XE Release 3S (ASR 900 Series)".
  43. ^"Literate programming".haskell.org.
  44. ^"Programming in Lua 1.3".www.Lua.org.Retrieved2017-11-08.
  45. ^macros.extractDocCommentsAndRunnables
  46. ^Kathleen Jensen, Niklaus Wirth (1985).Pascal User Manual and Report.Springer-Verlag.ISBN0-387-96048-1.
  47. ^Niklaus Wirth (1983).Programming in Modula-2.Springer-Verlag.ISBN0-387-15078-1.
  48. ^*Martin Reiser, Niklaus Wirth (1992).Programming in Oberon.Addison-Wesley.ISBN0-201-56543-9.
  49. ^ "perlpod – the Plain Old Documentation format".Retrieved2011-09-12.
  50. ^ "Pod::ParseUtils – helpers for POD parsing and conversion".Retrieved2011-09-12.
  51. ^ab "Perl 6 Documentation – Syntax (Comments)".Retrieved2017-04-06.
  52. ^ab"Python 3 Basic Syntax".Archived fromthe originalon 19 August 2021.Retrieved25 February2019.Triple quotes are treated as regular strings with the exception that they can span multiple lines. By regular strings I mean that if they are not assigned to a variable they will be immediately garbage collected as soon as that code executes. hence are not ignored by the interpreter in the same way that #a comment is.
  53. ^"Python tip: You can use multi-line strings as multi-line comments",11 September 2011, Guido van Rossum
  54. ^Talmage, Ronald R. (1999).Microsoft SQL Server 7.Prima Publishing.ISBN978-0-7615-1389-6.
  55. ^"MySQL 8.0 Reference Manual".Oracle Corporation.RetrievedJanuary 2,2020.
  56. ^"SQL As Understood By SQLite".SQLite Consortium.RetrievedJanuary 2,2020.
  57. ^"PostgreSQL 10.11 Documentation".The PostgreSQL Global Development Group.RetrievedJanuary 2,2020.
  58. ^"Oracle® Database SQL Reference".Oracle Corporation.RetrievedJanuary 2,2020.
  59. ^Andress, Mandy (2003).Surviving Security: How to Integrate People, Process, and Technology.CRC Press.ISBN978-0-8493-2042-2.

Further reading

edit
edit