
コンピュータプログラミングにおいて、コメントとは、翻訳者(コンパイラまたはインタプリタ)が無視するソースコードに埋め込まれたテキストのことです。一般的に、コメントはプログラマがコードを理解しやすくするための注釈であり、多くの場合、プログラム(コメントなし)コードではすぐには明らかにならない側面を説明します。[ 1 ]この記事では、コメントはプログラミング言語、マークアップ言語、設定ファイル、および同様のコンテキストにおける同じ概念を指します。 [ 2 ]ソースコード翻訳ツール以外の開発ツールの中には、 APIドキュメント生成、静的解析、バージョン管理統合などの機能を提供するためにコメントを解析するものもあります。コメントの構文はプログラミング言語によって異なりますが、言語間で構文に繰り返されるパターンや、コメントの内容に関連する類似点があります。
コメントによって支えられる柔軟性により、コンテンツスタイルの多様性が大きくなります。統一性を促進するために、スタイル規約は一般的にプログラミングスタイルガイドの一部となっています。しかし、ベストプラクティスは議論の的となり、矛盾しています。[ 3 ] [ 4 ]
コードコメントのサポートは、各プログラミング言語によって定義されます。機能は言語ごとに異なりますが、共通する属性もいくつかあります。
ほとんどの言語は、複数行のブロックコメント(ストリームとも呼ばれる)および/または単一行コメントをサポートしています。ブロックコメントは、コメントテキストの開始と終了を示すテキストで区切られます。複数行にわたることも、1行の任意の部分を占めることもできます。一部の言語では、ブロックコメントを再帰的にネストできますが、そうでない言語もあります。 [ 5 ] [ 6 ] [ 7 ]行コメントは、テキスト行の末尾で終了します。現代の言語では、行コメントは区切り文字で始まりますが、古い言語では、後続のテキストがコメントとみなされる列を指定するものもあります。[ 7 ]多くの言語は、ブロックコメントと行コメントの両方をサポートしており、それぞれに異なる区切り文字を使用します。たとえば、C、C++、およびそれらの多くの派生言語は、とで区切られたブロックコメントと、で区切られた行コメントをサポートしています/*。*/他//の言語は、1種類のコメントのみをサポートしています。[ 7 ]
コメントは、プログラムコードに対する位置と内容に基づいて、プロローグコメントとインラインコメントに分類することもできます。プロローグコメントは、シンボル宣言の前やファイルの先頭など、関連するプログラミングトピックの先頭付近にあるコメント(または関連するコメントのグループ)です。インラインコメントは、参照するプログラムコードと同じ行の右側にあるコメントです。[ 8 ]プロローグコメントとインラインコメントはどちらも、行コメントまたはブロックコメントとして表現できます。例:
/* * プロローグブロックのコメント*/ bool foo () { return true ; /* インラインブロックのコメント */ }// // プロローグ行コメント// bool bar () { return false ; // インライン行コメント}コメントは、 コードがなぜそのようになっているのか、つまり作者の意図を説明するのに役立ちます。コードの動作を説明するのは不要だと主張する人もいます。しかし、動作の説明が必要になるということは、コードが複雑すぎるため、修正する必要があることを示しています。
コメントでは、慣例やベストプラクティスに反するコードを書いた理由を説明する場合があります。例えば、次のようになります。
' フォームデータを再利用する際に発生するサーバーエラーのため、2 番目の変数が 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 , returnedElements [ i ]); }コードには、説明コメントが必要となるような斬新または注目すべき解決策が含まれている場合があります。このような説明は長文になる場合があり、図や正式な数学的証明が含まれることもあります。これは、コードの意図ではなく、コードが何をするかを説明するものですが、コードの保守に役立つ場合があります。これは、高度に専門化された問題領域や、めったに使用されない最適化、構造、関数呼び出しに適用される可能性があります。[ 11 ]
コードの一部が外部参照の情報に基づいている場合、コメントにはその参照先へのリンクが含まれます。例えば、URLや書籍名とページ番号などが挙げられます。
一般的な開発者の手法として、 1 行または複数行のコードをコメントアウトする方法があります。プログラマーは、プログラム コードをコメントに変換するコメント構文を追加することで、実行可能コードが実行時に実行されなくなります。この手法は、バグの原因を特定するために使われることがあります。プログラムの一部を体系的にコメントアウトして実行することで、問題のあるソース コードを特定できます。[ 12 ]
多くのIDEは、キーボードショートカットなどの便利なユーザーインターフェース操作でコメントを追加および削除することをサポートしています。
コメントには、コードに関するメタデータを保存できます。一般的なメタデータには、元の作者と後継のメンテナーの名前、最初に作成および変更された日付、開発およびユーザー向けドキュメントへのリンク、著作権やソフトウェアライセンスなどの法的情報が含まれます。まれに、テキストエンコードされたバイナリデータが含まれる場合もあります。
一部のプログラミングツールは、メタデータをコメントとしてコードに書き込みます。[ 13 ]例えば、バージョン管理ツールは、リポジトリにコミットされる際に、各ファイルに作成者、日付、バージョン番号などのメタデータを書き込むことがあります。[ 14 ]
コメントに保存された情報は、コードを処理する主要ツールである翻訳ツール以外の開発ツールによって使用される場合があります。この情報には、メタデータ(ドキュメント生成ツールなどでよく使用される)やツールの設定情報などが含まれます。
ソースコードエディタの中には、コメント内のメタデータによる設定をサポートするものがあります。[ 15 ]具体的な例としては、タブ文字の処理を設定するVimのmodeline機能があります。例:
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
APIドキュメントジェネレーターは、コード ベースから情報を解析してAPIドキュメントを生成します。多くのジェネレーターは、コメントから情報を読み取り、メタデータを解析することで、生成されるドキュメントの内容とフォーマットを制御する機能を備えています。
Although some claim that API documentation can be higher quality when written in a more traditional and manual way, some claim that storing documentation information in code comments simplifies the documenting process, as well as increases the likelihood that the documentation will be kept up to date.[16] Examples include Javadoc, Ddoc, Doxygen, Visual Expert and PHPDoc. Forms of docstring are supported by Python, Lisp, Elixir, and Clojure.[17]C#, F# and Visual Basic .NET implement a similar feature called "XML Comments" which are read by IntelliSense from the compiled .NET assembly.[18]
An ASCII artvisualization such as a logo, diagram, or flowchart can be included in a comment.[19]
The following code fragment depicts the process flow of a system administration script (Windows script file). Although a section marking the code appears as a comment, the diagram is in an XMLCDATA section, which is technically not a comment, but serves the same purpose here.[20] Although this diagram could be in a comment, the example illustrates one instance where the programmer opted not to use a comment as a way of including resources in source code.[20]
<!-- begin: wsf_resource_nodes --><resourceid="ProcessDiagram000"><![CDATA[ HostApp (Main_process) | Vscript.wsf (app_cmd) --> ClientApp (async_run, batch_process) | | V mru.ini (mru_history) ]]></resource>Sometimes, comments describe development processes related to the code. For example, comments might describe how to build the code or how to submit changes to the software maintainer.
場合によっては、コメントとしてフォーマットされたコードが、条件付きコメントなどの追加情報を翻訳者に伝えるためにオーバーロードされることがあります。そのため、一般的にコメントを示す構文は、実際にはコメントコードではなくプログラムコードを表すことがあります。このような構文は、追加機能を追加しながら互換性を維持する実用的な方法かもしれませんが、このような解決策を応急処置とみなす人もいます。[ 21 ]
その他の例としては、インタープリタの指示などがあります。
#!は、スクリプトの最初の行で使用され、使用するインタプリタを指定します。以下のUnix系システム向けのスクリプトは、これら2つの使用方法を示しています。
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- print ( "Testing" )gccコンパイラ(2017年以降)は、switch文でcaseが次のcaseにフォールスルーする場合、コメントを探します。フォールスルーの明示的な指示が見つからない場合、コンパイラはコーディング上の問題の可能性について警告を発します。フォールスルーに関するこのようなコメントを挿入することは長年の慣習であり、コンパイラはこの慣習をコード化しました。[ 24 ]例えば、次のようになります。
switch ( command ) {case CMD_SHOW_HELP_AND_EXIT :do_show_help ();/* フォールスルー */CMD_EXITの場合:do_exit ();壊す;}ストレス解消やユーモアを狙って、プログラマーはコードの品質、ツール、競合他社、雇用主、労働条件、その他プロらしくないと思われる話題についてコメントを追加することがあり、時には下品な言葉を使うこともある。[ 25 ] [ 26 ]
ソースコードにおけるコメントの適切な使用法については、さまざまな規範的見解や長年の意見が存在する。[ 27 ] [ 28 ]これらの中には、非公式で個人の好みに基づくものもあれば、特定のコミュニティ向けの正式なガイドラインとして公開または公布されているものもある。[ 29 ]
ソースコードにコメントを付けるのに適しているかどうか、またいつ付けるべきかについては、専門家の間でも意見が分かれている。[ 9 ] [ 30 ]ソースコードは自己説明的または自己文書化されるべきであるという理由で、コメントは少なく書くべきだと主張する人もいる。[ 9 ]一方、コードには広範囲にコメントを付けるべきだと示唆する人もいる(ソースコード内の空白以外の文字の 50% 以上がコメントに含まれていることは珍しくない)。 [ 31 ] [ 32 ]
これらの見解の間には、コメント自体は有益でも有害でもなく、重要なのはコメントが正しくソースコードと同期していることであり、余計なもの、過剰なもの、保守が困難なもの、またはその他の点で役に立たないものは省略すべきであるという主張がある。[ 33 ] [ 34 ]
プログラミングにおける契約設計のアプローチでは、契約内容を文書化するためにコメントが使用されることがある。
コードの対象読者やその他の考慮事項によっては、詳細度や説明の程度は大きく異なる場合があります。
例えば、プログラミング入門書では、次のようなJavaのコメントが適切でしょう。
String s = "Wikipedia" ; /* 変数 s に "Wikipedia" という値を代入します。 */しかし、このような詳細さは、本番コードや経験豊富な開発者が関わるその他の状況では適切ではありません。このような初歩的な記述は、「良いコメントは…意図を明確にする」というガイドラインと矛盾します。[ 10 ]さらに、プロのコーディング環境では、詳細さのレベルは通常、業務によって定義された特定のパフォーマンス要件を満たすように明確に定義されています。[ 32 ]
自由形式のテキストであるコメントは、さまざまな方法でスタイルを設定できます。多くの人は、一貫性があり、邪魔にならず、変更しやすく、壊れにくいスタイルを好みます。一貫性のあるレベルは価値があり有益であると主張する人もいるため、一貫したコメントスタイルは、プロジェクトの開始前に合意される場合もあれば、開発の進行とともに自然に生まれる場合もあります。[ 35 ]
以下のC言語コードの断片は、ブロックコメントのスタイルの多様性を示しています。
/* これはコメント本文です。*//***************************** * * * これはコメント本文です。 * * * *****************************/個人の好みやプログラミングツールの柔軟性といった要素は、コメントのスタイルに影響を与える可能性があります。例えば、2番目の例のようにコメントを自動的にフォーマットしないソースコードエディタを使用するプログラマーは、最初のスタイルを好むかもしれません。
ソフトウェアコンサルタント兼テクノロジー評論家のアレン・ホルブ[ 36 ]は、コメントの左端を揃えることを提唱している。[ 37 ]
/* これは、Holub が C および C++ に推奨するスタイルです。 * 「Enough Rope」のルール 29 でその例が示されています。 *//* これはC言語での別の方法です。 **コメントの2行目から最後の行までを自動的に1スペースインデントしないエディタでは、この方法の方が簡単です。** また、Holubの著書のルール31でも使用されています。*/多くの言語では、行コメントはプログラムコードの後にインラインで記述され、通常は左側のコードを説明します。たとえば、次のPerlコードでは次のようになります。
print $s . "\n" ; # 印刷後に改行文字を追加プログラミング言語が行コメントとブロックコメントの両方をサポートしている場合、プログラミングチームはどちらをいつ使用するかという慣例を決定することができます。例えば、行コメントは些細なコメントにのみ使用し、ブロックコメントはより高レベルの抽象化に使用する、といった具合です。
コメントの中には、タグ、コードタグ[38][39]、トークン[40]などの接頭辞で分類されるものがあります。一部のエディターは、タグに基づいてコメントを強調表示します。
一般的に使用されるタグには以下が含まれます。
例えば:
int current_stock_price () { return 100 ; // TODO 実際のリアルタイム価格を取得するためのAPI呼び出しを実装する}コメントの構文はプログラミング言語によって異なります。複数の言語で共通して使用されるパターンがある一方で、言語ごとに構文の多様性も大きく異なります。このセクションの長さを抑えるため、構文が同じか非常に似ている言語ごとに例をまとめています。また、構文があまり一般的でない特定の言語の例も掲載しています。
C、C++、およびそれらの多くの派生言語など、中括弧を使用する言語の多くは、行コメントを で、//ブロックコメントを と で/*区切ります。元々、Cには行コメントがありませんでしたが、 C99*/で追加されました。代表的な言語には、C、C++、 C#、D、Java、JavaScript、Swiftなどがあります。例:
/* * 最大プロセス制限を超えているかどうかを確認しますが、root は必ず除外してください。* これは、ログイン時にユーザーごとのプロセス制限を、root が実行しているプロセスよりも低い値に設定できるようにするために必要です。*/ bool isOverMaximumProcessLimit () { // TODO 実装}D [ 41 ]や Swift [ 42 ]などの言語ではブロックコメントをネストできますが、C や C++ などの言語ではできません。
D言語におけるネストされたブロックの例:
// 行コメント/* ブロックコメント*/ /+ 外側ブロックの開始 /+ 内側ブロック +/ 外側ブロックの終了 +/Swiftにおけるネストされたブロックの例:
/* これは外側のコメントの開始です。 /* これはネストされたコメントです。 */これは外側のコメントの終了です。 */多くのスクリプト言語では、行コメントを で区切るのが一般的です#。ブロックコメントのサポートは言語によって異なります。代表的な言語としては、Bash、Raku、Ruby、Perl、PowerShell、Python、Rなどがあります。
R言語での例:
# これはコメントですprint ( "これはコメントではありません" ) # これは別のコメントですブロックコメントは、行頭の と で区切られます。例=begin:=end
puts "not a comment" # これはコメントですputs "not a comment" =beginこれらの行には何が入っても、人間が読むためのものです=end puts "not a comment"Perl では、通常のブロックコメント構造の代わりに、リテラルプログラミングのプレーン オールド ドキュメンテーション (POD)マークアップを使用します。[ 43 ]例えば: [ 44 ]
=item Pod::List->new()新しいリストオブジェクトを作成します。プロパティは、次のようにハッシュ参照を介して指定できます。 my $list = Pod::List->new({ -start => $., -indent => 4 }); =cut sub new { ... }Raku(以前はPerl 6と呼ばれていました)は、 Perlと同じ行コメントとPODコメントを使用しますが、設定可能なブロックコメントタイプ「複数行/埋め込みコメント」を追加します。[ 45 ]これは、で始まり#`、次に開き括弧文字が続き、対応する閉じ括弧文字で終わります。[ 45 ]例:
#`{{ "このバージョンをコメントアウト" toggle-case(Str:D $s)文字列内の各文字の大文字/小文字を切り替えます: my Str $toggled-string = toggle-case("mY NAME IS mICHAEL!"); }} sub toggle-case ( Str:D $s ) #`( このバージョンの括弧が現在使用されています ) { ... } <#PowerShell は、とで区切られたブロック コメントをサポートしています#>。例:
# 単一行コメント<# 複数 行 コメント #>Python にはブロック コメントは用意されていませんが[ 46 ]、この目的のために三重引用符で囲まれた文字列で表される生の文字列リテラルがよく使用されます。 [ 47 ] [ 46 ]以下の例では、三重二重引用符で囲まれた文字列はコメントのように機能しますが、ドキュメント文字列としても扱われます。
"""ファイルの先頭にあるのがモジュールのドキュメント文字列です"""クラスMyClass : """クラスのドキュメント文字列"""def my_method ( self ): """メソッドのドキュメント文字列"""マークアップ言語は一般的にコメント構文が異なりますが、 HTMLやXMLなどの有名なインターネットマークアップ形式では、ブロックコメントは`<br>`と`<br>`で区切られ<!--、行コメントはサポートされていません。XMLの例を以下に示します。-->
<!-- ここでコンテキストを選択します --> <param name= "context" value= "public" />SGMLとの互換性のため、コメント内では二重ハイフン(--)は使用できません。
ColdFusionはHTMLのコメントに似た構文を提供しますが、ハイフンを2つではなく3つ使用します。CodeFusionでは、ネストされたブロックコメントが可能です。
Haskellでは、ブロックコメントは と で区切られます{-。-}例:
{- これは複数行のコメントです-} -- これは1行のコメントですputStrLn "Wikipedia" -- これは別のコメントですHaskellには、「バードスタイル」と呼ばれるリテラルプログラミングのコメント方法も用意されています。 [ 48 ]で始まる行は>コードとして解釈され、それ以外はすべてコメントとみなされます。コードブロックの前後に空白行を入れることも必須条件です。
Birdスタイルでは、コードの前に空白を空ける必要があります。 > fact :: Integer -> Integer > fact 0 = 1 > fact ( n + 1 ) = ( n + 1 ) * fact n コードの後には必ず空白行を入れなければなりません。 リテラルプログラミングはLaTeXでも実現できます。定義の例:
\usepackage { verbatim } \newenvironment { code }{ \verbatim }{ \endverbatim }以下のように使用します。
% LaTeX ソースファイル\verb | fact n| 関数呼び出しは、$ n \ge 0 $の場合、 $ n ! $を計算します。定義は次のとおりです。\\ \begin { code } fact :: Integer -> Integer fact 0 = 1 fact ( n + 1 ) = ( n + 1 ) * fact n \end { code } \LaTeX {}マークアップ を使用した詳細な説明は次のとおりです。--[[Lua は、と]][ 49 ]で区切られたブロック コメントをサポートしています。例:
--[[複数行にわたる長いコメント]]SQL の一部のバリアントでは、中括弧言語ブロックコメント ( /**/) がサポートされています。バリアントには、Transact-SQL、MySQL、SQLite、PostgreSQL、Oracleなどがあります。[ 50 ] [ 51 ] [ 52 ] [ 53 ] [ 54 ]
MySQLは、.で区切られた行コメントもサポートしています#。
APLでは、行コメントに「lamp」を使用します⍝。例:
⍝ 数字を足し合わせる: c ← a + b ⍝ 足し算⊣「左」と⊢「右」の基本要素を持つ方言では、コメントは無視される文字列の形式で、ステートメントの中または独立したステートメントの中に記述できる場合が多い。
d ← 2 × c ⊣ 'where' ⊢ c ← a + 'bound' ⊢ bAppleScriptは、行コメントとブロックコメントの両方をサポートしています。例:
# 行コメント (後のバージョン) (*このプログラムは挨拶を表示します。*) on greet ( myGreeting ) display dialog myGreeting & " world!" end greet-- 挨拶を表示しますgreet ( "こんにちは" )BASICの初期バージョンでは、REM行コメントに(remarkの略)が使用されていました。
10 REM このBASICプログラムは、PRINT文とGOTO文の使い方を示しています。15 REM 画面に「HELLO」というフレーズを表示します。20 PRINT "HELLO" 30 GOTO 20Quick 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 ClassCisco ルータの設定モードでは、感嘆符 (!) を使用してコメントをマークできますが、そのようなコメントは不揮発性メモリ(起動設定が含まれている)には保存されず、「show run」コマンドでも表示されません。[ 55 ] [ 56 ]
設定の一部である人間が読めるコンテンツを挿入することが可能で、以下の方法でNVRAMの起動設定に保存できます。
以下のテキストを貼り付けて、トラフィックを手動で再ルーティングしてください。 設定t int gi0/2 閉めない 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 シャット 出口 以下の固定形式のFortranコード断片は、コメント構文が列指向であることを示しています。最初の列に文字がCあると、行全体がコメントとして扱われます。Fortran 77では、1列目のアスタリスクもコメントを示します。
C C 最初の列(コメント列)で「C」で始まる行はコメントですC WRITE ( 6 , 610 ) 610 FORMAT ( 12 H HELLO WORLD ) END以下のFortran 90コード断片は、より現代的な行コメント構文を示しています。テキストは . の後に続きます!。
! コメントプログラムcomment_test print '(A)' , 'Hello world' ! コメント終了プログラムFortran 90で導入された自由形式Fortranは、後者のコメント形式のみをサポートしています。
Fortran標準には含まれていませんが、多くのFortranコンパイラはオプションでC言語のようなプリプロセッサ処理を提供しています。これを利用して、ブロックコメントを追加できます。
#if 0これは複数行にまたがるブロックコメントです。#endif program comment_test print '(A)' , 'Hello world' ! これもコメントですend programMATLABのプログラミング言語では、「%」文字は単一行コメントを示します。複数行コメントは、 %{ および %} 括弧を使用して使用することもでき、ネストすることもできます。例:
% これらは各項d = [ 0 - 1 0 ] の導関数です。%{ %{ (ネストされたコメントの例。インデントは見た目のためであり、無視されます。) %}テイラーの公式に従って、数列を形成します。ここで、ベクトルに対して操作を行っていることに注意してください。%} seq = d .* ( x - c ) .^ n ./ ( factorial ( n ))% 合計してテイラー近似値を取得しますapprox = sum ( seq )Nimでは、行コメントは`<code>`で#、ブロックコメントは`<code>`と#[`<code>`で区切られます]#。ブロックコメントはネストできます。
Nimには、 MarkdownとReStructuredTextのマークアップを混在させたドキュメントコメントもあります。行ドキュメントコメントは「##」を使用し、ブロックドキュメントコメントは「##[」と「]##」を使用します。コンパイラは、ドキュメントコメントからHTML、LaTeX、JSONドキュメントを生成できます。ドキュメントコメントは抽象構文木の一部であり、マクロを使用して抽出できます。[ 57 ]
## モジュール *ReSTructuredText* および **MarkDown** のドキュメント# これはコメントですが、ドキュメントのコメントではありません。type Kitten = object ## 型のドキュメントage : int ## フィールドのドキュメントproc purr ( self : Kitten ) = ## 関数のドキュメントecho "Purr Purr" # これはコメントですが、ドキュメントのコメントではありません。# これはコメントですが、ドキュメントコメントではありません。OCamlはネスト可能なコメントをサポートしています。例:
codeLine (* コメントレベル 1 (* コメントレベル 2 *) *)PascalとDelphiでは、ブロック コメントは と で区切られ{、}これらの文字をサポートしないコンピュータの代替として と(*も*)サポートされています。行コメントは で区切られます\\。[ 58 ] Niklaus Wirthのより現代的な言語ファミリー ( Modula-2やOberonを含む)では、コメントは(*とで区切られます*)。[ 59 ] [ 60 ]コメントはネストできます。例:
(* 対角線をテスト *) columnDifference := testColumn - column ; if ( row + columnDifference = testRow ) or .......PHPのコメントは、中括弧スタイル (行とブロックの両方) または#l で区切られた行のいずれかになります。ブロックはネストできません。PHP 8 以降では、#直後に が続かない限り、 はコメントとして扱われます[。それ以外の場合は、次の まで続く属性を区切ります]。例:
/** * このクラスにはサンプルドキュメントが含まれています。* @author 不明*/ #[ Attribute ] class MyAttribute { const VALUE = 'value' ; // C++ スタイルの行コメントprivate $value ; # スクリプトスタイルの行コメントpublic function __construct ( $value = null ) { $this -> value = $value ; } }--1行コメントには、比較的緩やかな言語群が使用されます。代表的な言語としては、 Ada、Eiffel、Haskell、Lua、SQL、VHDLなどが挙げられます。ブロックコメントのサポート状況は言語によって異なります。Adaの例を以下に示します。
-- 航空管制官タスクは離陸と着陸の要求を受け付けますタスクタイプController ( My_Runway : Runway_Access )は-- 同期メッセージパッシングのタスクエントリですエントリRequest_Takeoff ( ID : in Airplane_ID ; Takeoff : out Runway_Access );エントリRequest_Approach ( ID : in Airplane_ID ; Approach : out Runway_Access ); end Controller ;インタプリタ型言語では、オペレーティングシステムの機能や管理者の選択によっては、コメントを含むソースコード全体がプログラムのエンドユーザーに表示される場合があります。コメントに秘密情報が含まれている場合や、秘密のコード部分が単にコメントアウトされている場合、これはセキュリティ上の脆弱性となる可能性があります。[ 61 ]
三重引用符は、複数行にまたがる可能性があるという点を除いて、通常の文字列として扱われます。通常の文字列とは、変数に代入されていない場合、そのコードが実行されるとすぐにガベージ コレクションされることを意味します。したがって、#a コメントと同じように、インタープリタによって無視されることはありません。