
コンピュータプログラミングにおいて、コメントとは、コンピュータプログラムのソースコード内にある、人間が読める形式の説明または注釈のことである。コメントはソースコードを人間が理解しやすくすることを目的として追加され、コンパイラやインタープリタでは一般的に無視される。[1] [2]さまざまなプログラミング言語におけるコメントの構文は大きく異なる。
コメントは、ドキュメント ジェネレータによってソース コード自体の外部にドキュメントを生成するためにさまざまな方法で処理されたり、ソース コード管理システムやその他の種類の外部プログラミング ツールとの統合に使用されたりすることがあります。
コメントによって提供される柔軟性により、幅広い可変性が許容されますが、コメントの使用に関する正式な規則は、通常、プログラミング スタイルガイドの一部です。
概要
コメントは通常、ブロックコメント(プロローグコメントまたはストリームコメントとも呼ばれる)または行コメント(インラインコメントとも呼ばれる)のいずれかの形式で記述されます。[3]
ブロックコメントは、複数行または1行の一部にまたがるソースコードの領域を区切る。この領域は開始区切り文字と終了区切り文字で指定される。一部のプログラミング言語( MATLABなど)では、ブロックコメントを再帰的にネストできるが、他の言語( Javaなど)ではできない。[4] [5] [6]
行コメントは、コメント区切り文字で始まり、行末まで続くか、場合によってはソースコード内の特定の列(文字行オフセット)から始まり、行末まで続きます。[6]
一部のプログラミング言語では、異なるコメント区切り文字を使用してブロックコメントと行コメントの両方を採用しています。たとえば、C++/*には、 とで区切られ*/複数行にまたがるブロックコメントと、 で区切られた行コメントがあります//。他の言語では、1 種類のコメントのみをサポートしています。たとえば、Ada のコメントは行コメントです。行コメントは で始まり--、行末まで続きます。[6]
用途
コメントをどのように活用するのが最善かは議論の余地があり、さまざまなコメンテーターがさまざまな、時には相反する視点を提示している。[7] [8] コメントの書き方にはさまざまな方法があり、多くのコメンテーターが矛盾したアドバイスを提供している。[8]
計画とレビュー
コメントは、実際のコードを書く前に意図を概説するための擬似コードとして使用できます。この場合、コード自体ではなく、コードの背後にあるロジックを説明する必要があります。
/* サーバーから返されたすべての要素を逆方向にループします
(要素は時系列で処理される必要があります)*/
for ( i = ( numElementsReturned - 0 ); i >= 1 ; i -- ) { /* 各要素のデータを処理します */ updatePattern ( i , returnedElements [ i ]); }
このタイプのコメントを残しておくと、コードと意図した結果を直接比較できるため、レビュー プロセスが簡素化されます。理解しやすいコードは期待どおりの動作をするというのが、よくある論理的誤りです。
コードの説明
コメントは、コードを要約したり、プログラマーの意図を説明したりするために使用できます。この考え方によると、コードを平易な英語で言い直すことは不必要であると考えられています。コードを再説明する必要があるということは、コードが複雑すぎて書き直す必要があるか、または命名が間違っていることの兆候である可能性があります。
- 「悪いコードを文書化するのではなく、書き直しましょう。」[9]
- 「良いコメントはコードを繰り返したり説明したりするのではなく、その意図を明確にします。コメントは、コードよりも抽象度の高いレベルで、何をしようとしているのかを説明する必要があります。」[10]
コメントは、コード ブロックが規則やベスト プラクティスに適合していない理由を説明するためにも使用できます。これは、開発時間がほとんどないプロジェクトやバグ修正のプロジェクトに特に当てはまります。例:
' フォーム データを再利用するときにサーバー エラーが発生するため、2 番目の変数は暗くなります。サーバーの動作の問題に関するドキュメントはない
ため、その点についてのみコーディングします。vtx
= server . mappath ( "local settings" )
アルゴリズムの説明
ソースコードには、特定の問題に対する斬新な、あるいは注目すべき解決策が含まれていることがあります。そのような場合、コメントには方法論の説明が含まれることがあります。そのような説明には、図や正式な数学的証明が含まれることがあります。これは、意図の明確化ではなく、コードの説明となる場合がありますが、コードベースの保守を担当する他の人は、そのような説明が重要だと考えるかもしれません。これは、高度に専門化された問題領域、またはめったに使用されない最適化、構造、または関数呼び出しの場合に特に当てはまります。[11]
たとえば、プログラマーは、理論的には挿入ソートの方がクイックソートよりも遅いため、クイックソートではなく挿入ソートが選択された理由を説明するコメントを追加する場合があります。これは次のように記述できます。
list = [ f ( b ), f ( b ), f ( c ), f ( d ), f ( a ), ... ] ; // 安定したソートが必要です。また、パフォーマンスはそれほど重要ではありません。inserting_sort ( list );
リソースの包含
ASCIIアート構造からなるロゴ、図表、フローチャートは、コメントとしてフォーマットされたソースコードに挿入できます。 [12]さらに、著作権表示をコメントとしてソースコード内に埋め込むことができます。バイナリデータは、バイナリからテキストへのエンコーディングと呼ばれるプロセスを通じてコメントにエンコードされることもありますが、このような方法は一般的ではなく、通常は外部リソースファイルに委ねられています。
次のコード フラグメントは、Windows Script Hostで実行されているWindows スクリプト ファイルに含まれるシステム管理スクリプトのプロセス フローを表す簡単な ASCII ダイアグラムです。コードをマークするセクションはコメントとして表示されますが、ダイアグラム自体は実際にはXML CDATAセクションに表示されます。これは技術的にはコメントとは異なると考えられていますが、同様の目的に使用できます。[13]
<!-- begin: 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、このプログラム ファイルの ソフトウェア ライセンスの名前などが含まれます。
プログラムの一部のアルゴリズムが書籍またはその他の参考文献の説明に基づいている場合、コメントを使用して書籍またはRequest for Commentsまたはその他の参考文献のページ番号とタイトルを示すことができます。
デバッグ
開発者の一般的なやり方として、コード スニペットをコメントアウトすることが挙げられます。これは、コメント構文を追加してそのコード ブロックをコメントにし、最終的なプログラムで実行されないようにすることを意味します。これは、最終的なプログラムから特定のコード部分を除外するために実行できますが、(より一般的には) エラーの原因を見つけるために使用できます。プログラムの一部を体系的にコメント アウトして実行することで、エラーの原因を特定し、修正することができます。
多くの IDE では、単一のメニュー オプションまたはキーの組み合わせで、このようなコメントをすばやく追加または削除できます。プログラマーは、コメントを追加または削除するテキストの部分をマークし、適切なオプションを選択するだけです。
自動ドキュメント生成
プログラミングツールは、コメント内にドキュメントやメタデータを保存することがあります。 [14]これらには、ヘッダーファイルの自動インクルードのための挿入位置、ファイルの構文強調表示モードを設定するコマンド、[15]またはファイルのリビジョン番号が含まれます。[16]これらの機能制御コメントは、一般的に注釈とも呼ばれます。ソースコードのコメント内にドキュメントを保存することは、ドキュメント作成プロセスを簡素化する1つの方法であると考えられており、コードの変更に合わせてドキュメントが最新の状態に保たれる可能性が高くなります。[17]
ドキュメントジェネレーターの例としては、Javaで使用するJavadoc、Dで使用するDdoc、C、C++、Java、IDLで使用するDoxygen 、 PL/SQL、Transact-SQL、PowerBuilderで使用するVisual Expert、PHPで使用するPHPDocなどがあります。docstringの形式は、Python、Lisp、Elixir、Clojureでサポートされています。[18]
C#、F#、Visual Basic .NETは、コンパイルされた.NETアセンブリからIntelliSenseによって読み取られる「XMLコメント」と呼ばれる同様の機能を実装しています。[19]
構文拡張
時には、もともとコメントとして意図されていた構文要素が、「条件付きコメント」などの追加情報をプログラムに伝えるために再利用されることがあります。このような「ホットコメント」は、下位互換性を維持する唯一の実用的な解決策かもしれませんが、広くその場しのぎの解決策と見なされています。[20]
具体的な例としては、docblocksがあります。これは、特定のコードセグメントを文書化するために使用される、特別にフォーマットされたコメントです。これにより、DocBlock 形式はターゲット言語に依存しなくなります (コメントをサポートしている限り)。ただし、複数の標準や一貫性のない標準が生まれる可能性もあります。
指令の使用
通常のコメント文字が、エディターまたはインタープリター用の 特別なディレクティブを作成するために利用される場合もあります。
通訳者を指示する 2 つの例を以下に示します。
- Unix の「シェバン」
#!は、スクリプトの最初の行で使用され、使用するインタープリターを指します。 - ソースファイルが使用しているエンコーディングを識別する「マジックコメント」[21]、例えばPythonのPEP 263。[22]
Unix ライクなシステム用の以下のスクリプトは、これら両方の使用法を示しています。
#!/usr/bin/env python3
# -*- コーディング: UTF-8 -*-
print ( "テスト中" )
これに似たのが、C でコメントを使用して、 case ステートメントのデフォルトの「フォールスルー」が意図的に実行された ことをコンパイラーに伝える方法です。
スイッチ(コマンド) {
CMD_SHOW_HELP_AND_EXITの場合:
ヘルプを表示する
/* フォールスルー */
CMD_EXITの場合:
終了する();
壊す;
CMD_OTHERの場合:
その他の処理を実行します。
壊す;
/* ... など ... */
}
人間の読者のためにこのようなコメントを挿入することは/* Fall thru */すでに一般的な慣例となっていましたが、2017年にgccコンパイラはこれら(または意図的な意図を示す他の兆候)を探し始め、見つからない場合は「警告:この文は失敗する可能性があります」と出力しました。[23]
多くのエディタやIDE は、特別にフォーマットされたコメントを読み取ります。たとえば、Vimの「modeline」機能は、ファイルの先頭近くに次のコメントが含まれているソースを編集するときにタブの処理を変更します。
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
ストレス解消
プログラマーはストレス解消の手段として、開発ツール、競合他社、雇用主、労働条件、コード自体の品質などについてコメントを追加することがあります。[24]この現象の発生は、ソースコード内の卑猥な言葉を追跡するオンラインリソースから簡単に確認できます。[25]
規範的見解
ソースコード内のコメントの適切な使用に関しては、様々な規範的な見解や長年の意見があります。[26] [27]これらの中には非公式で個人の好みに基づいたものもありますが、特定のコミュニティの正式なガイドラインとして公開または公布されているものもあります。[28]
コメントの必要性
ソースコードにコメントが適切かどうか、またいつ適切であるかについて、専門家の間ではさまざまな見解があります。[9] [29]ソースコードは自己説明的または自己文書化的であるべきであるという理由で、ソースコードはコメントを少なく書くべきだと主張する人もいます。[9]また、コードには広範囲にコメントを付けるべきだと提案する人もいます(ソースコード内の空白以外の文字の50%以上がコメント内に含まれることは珍しくありません)。 [30] [31]
これらの見解の中間には、コメントはそれ自体では有益でも有害でもないという主張があり、重要なのはコメントが正しく、ソースコードと同期していることであり、コメントが不必要、過剰、保守が困難、またはその他の点で役に立たない場合は省略されるという主張があります。[32] [33]
コメントは、プログラミングにおける契約による設計アプローチにおいて、契約を文書化するために時々使用されます。
詳細レベル
コードの対象読者やその他の考慮事項に応じて、詳細レベルと説明は大幅に異なる場合があります。
たとえば、次の Java コメントは、初心者向けのプログラミングを教える入門テキストに適しています。
文字列s = "Wikipedia" ; /* 変数 s に値 "Wikipedia" を割り当てます。 */
しかし、このレベルの詳細さは、製品コードや、経験豊富な開発者が関わるその他の状況では適切ではありません。このような初歩的な説明は、「良いコメントは意図を明確にする」というガイドラインに反しています。[10]さらに、プロフェッショナルなコーディング環境では、詳細レベルは通常、ビジネス オペレーションによって定義された特定のパフォーマンス要件を満たすように適切に定義されています。[31]
スタイル
ソースコード内でのコメントの表示方法を考える場合、多くのスタイルの選択肢があります。開発者チームが関わる大規模なプロジェクトの場合、コメントのスタイルはプロジェクト開始前に合意されるか、プロジェクトの拡大に伴って慣習や必要性に応じて進化します。通常、プログラマーは一貫性があり、邪魔にならず、変更しやすく、壊れにくいスタイルを好みます。[34]
コメントをブロック
次の C のコード フラグメントは、同じ基本情報を伝えながらも、コメントのスタイルがどのように変化するかを示すほんの一例です。
/*
これはコメント本文です。
バリエーション 1。
*/
/**************************\
* *
* これはコメント本文です。 *
* バリエーション 2。 *
* *
\****************************/
個人の好み、プログラミング ツールの柔軟性、その他の考慮事項などの要因が、ソース コードで使用されるスタイルのバリエーションに影響を与える傾向があります。たとえば、バリエーション 2 は、コメント内のテキストの配置と外観を自動化できる ソース コード エディターを持たないプログラマーには好まれない可能性があります。
ソフトウェアコンサルタントであり技術評論家のアレン・ホルブ[35]は、コメントの左端を揃えることを提唱する専門家の一人である。[36]
/* これは、C および C++ 用に Holub が推奨するスタイルです。
* これは、「Enough Rope」のルール 29 で示されています。
*/
/* これは C で行う別の方法です。 **
コメントの 2 行目から最後の行までを最初の行から 1 スペース分自動的にインデントしないエディタで行う方が簡単です。
** これは Holub の本のルール 31 でも使用されています。*/
ブロックコメントの区切り文字として/*と*/を使用する方法は、Cプログラミング言語の直前の言語であるBプログラミング言語にPL/Iから継承されました。[37]
行コメント
行コメントでは通常、コメントの開始を示すために任意の区切り文字またはトークンのシーケンスを使用し、コメントの終了を示すために 改行文字を使用します。
この例では、ASCII 文字 // から行末までのすべてのテキストが無視されます。
// -------------------------
// これはコメント本文です。
// -------------------------
多くの場合、このようなコメントは左端から始まって行全体に及ぶ必要があります。ただし、多くの言語では、次の Perl の例のように、コマンドラインにコメントをインラインで配置して、コメントを追加することもできます。
print $s . "\n" ; # 印刷後に改行文字を追加する
言語が行コメントとブロックコメントの両方を許可している場合、プログラミングチームは、行コメントをマイナーなコメントにのみ使用し、ブロックコメントを高レベルの抽象化を説明するなど、それらを別々に使用する規則を決定できます。
タグ
プログラマーは、一般的な問題をインデックス化するために、コメントに非公式のタグを使用する場合があります。これにより、 Unix grepユーティリティなどの一般的なプログラミングツールで検索したり、テキストエディター内で構文を強調表示したりできるようになります。これらは「コードタグ」 [38] [39]または「トークン」と呼ばれることもあり、開発ツールはそれらをすべてリスト化するのに役立つこともあります。[40]
このようなタグは多岐にわたりますが、次のようなものが含まれます。
- BUG、DEBUG —修正する必要がある既知のバグ。
- FIXME — 修正する必要があります。
- HACK、BODGE、KLUDGE — 回避策。
- TODO — やるべきこと。
- 注 — 特に注目すべき落とし穴を強調するために使用されます。
- UNDONE — 以前のコードの元に戻す、または「ロールバック」します。
- XXX — 問題のあるコードや誤解を招くコードを他のプログラマーに警告する
例
比較
コメントを指定するための表記規則は多岐にわたります。さらに、個々のプログラミング言語では独自のバリエーションが提供されることもあります。
エイダ
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 ;
オーストラリア
APL は、⍝行末までのコメントを示すために を
使用します。
例えば:
⍝ 数字を足します:
c ← a + b ⍝ 足し算
⊣("left") および("right") プリミティブを持つ方言では、コメントは無視される文字列の形式で、ステートメント内または別のステートメント
内に⊢存在することがよくあります。
d ← 2 × c ⊣ 'ここで' ⊢ c ← a + '境界' ⊢ b
AppleScript
AppleScriptコードのこのセクションには、その言語で使用される 2 つのコメント スタイルが表示されます。
(*
このプログラムは挨拶を表示します。
*)
on greeting ( myGreeting )
display dialog myGreeting & " world!"
end greeting
-- 挨拶を表示します
( 「こんにちは」)
ベーシック
この古典的な初期のBASICコード フラグメントでは、コメントを追加するために REM ( 「Remark」 ) キーワードが使用されています。
10 REM この BASIC プログラムは、PRINT および GOTO ステートメントの使用方法を示しています。15 REM 画面に「HELLO」というフレーズが表示されます20 PRINT "HELLO" 30 GOTO 20
Quick Basic、Q Basic、Visual Basic、Visual Basic .NET、VB Scriptなどの後継のMicrosoft BASIC や、 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
この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 -> edges ; e ; e = e -> next ) { if ( e -> dst == m ) { /*********/ return e ; } } for ( e = m -> edges ; e ; e = e -> next ) { if ( e -> dst == n ) { /*****/ break ; } } return e ; }
awkなど、ブロックコメントがない多くの言語では、代わりに のようなステートメント区切りのシーケンスを使用できます。ただし、 Python;のように、意図されたブロック構造を厳密に示すためにインデントを使用する言語では、これは不可能です。
Cisco IOS および IOS-XE の設定
感嘆符(! )は、シスコルータの設定モードでコメントをマークするために使用できますが、そのようなコメントは不揮発性メモリ(スタートアップコンフィギュレーションを含む)に保存されず、「show run」コマンドによっても表示されません。[41] [42]
実際には設定の一部である人間が読めるコンテンツを挿入することが可能で、次の方法でNVRAMスタートアップ設定 に保存できます。
- 「description」コマンドは、インターフェースまたはBGPネイバーの設定に説明を追加するために使用されます。
- 静的ルートにコメントを追加するための「name」パラメータ
- アクセスリストの「コメント」コマンド
! トラフィックを手動で再ルーティングするには、以下のテキストを貼り付けます
設定t
整数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 コメントに似たコメントを使用しますが、2 つのダッシュではなく 3 つのダッシュを使用します。これらのコメントは ColdFusion エンジンによってキャッチされ、ブラウザーには出力されません。
このようなコメントはネスト可能です。
<!--- これはブラウザに「Hello World」を出力します。
<!--- これは最初のコメント内で使用されるコメントです。
--->
--->
<cfoutput>
Hello World < br />
</cfoutput>
だ
D はC++ スタイルのコメントと、'/+' で始まり '+/' で終わるネスト可能な D スタイルの複数行コメントを使用します。
// これは単一行コメントです。
/* これは複数行コメントです。
*/
/+ これは
/+ ネストされた +/
コメントです +/
フォートランIV
このFortran IVコード フラグメントは、列指向の強い言語でコメントがどのように使用されるかを示しています。列 1 に文字「C」があると、行全体がコメントとして扱われます。
C
C 'C'で始まる行(最初の列または'コメント'列)はコメントです
C
WRITE ( 6 , 610 ) 610 FORMAT ( 12 H HELLO WORLD ) END
それ以外の場合、行の列は 4 つのフィールドとして扱われることに注意してください。1 から 5 はラベル フィールド、6 は行を前のステートメントの継続として扱い、宣言とステートメントは 7 から 72 に記述されます。
フォートラン90
このFortranコード フラグメントは、その言語でコメントがどのように使用されるかを示しており、コメント自体が基本的な書式設定ルールを説明しています。
!* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!* 感嘆符の後のすべての文字はコメントとみなされます *
!* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
program comment_test
print '(A)' , 'Hello world' ! Fortran 90 では、インラインコメントのオプションが導入されました。end program
ハスケル
Haskell の行コメントは行末まで '--' (ハイフン 2 つ) で始まり、複数行コメントは '{-' で始まり '-}' で終わります。
{- これは複数行のコメントです
-}
-- これは 1 行のコメントです
putStrLn "Wikipedia" -- これは別のコメントです
Haskell は「Bird Style」と呼ばれる文芸プログラミングのコメント方式も提供しています。 [43]この方式では、> で始まる行はすべてコードとして解釈され、それ以外はすべてコメントとみなされます。もう 1 つの要件は、コード ブロックの前後に常に空白行を残すことです。
Bird スタイルでは、コードの前に空白を残す必要があります。
>事実::整数->整数>事実0 = 1 >事実( n + 1 ) = ( n + 1 ) *事実n
また、コードの後にも空白行を残す必要があります。
Haskell では、 LaTeX を使用して文芸プログラミングを行うこともできます。Richard Bird のスタイルの代わりにコード環境を使用できます。LaTeXスタイルでは、これは上記の例と同等であり、コード環境は LaTeX のプリアンブルで定義できます。簡単な定義は次のとおりです。
\usepackage { verbatim }
\newenvironment {コード}{ \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 では、コメントの前に // を使用し、複数行のコメントには /* */ を使用します。
// 1行のJavaScriptコメント
var iNum = 100 ; var iTwo = 2 ; // 行末のコメント/*複数行のJavaScriptコメント*/
ルア
Luaプログラミング言語は、Ada、Eiffel、Haskell、SQL、VHDL言語--と同様に、1行のコメントに二重ハイフン を使用します。Luaにはブロックコメントもあり、 で始まり、終了まで続きます。--[[]]
例えば:
--[[複数行の
長いコメント
]]
print ( 20 ) -- 結果を印刷する
コードの一部をコメントアウトする一般的な手法[44]は、以下のようにコードをとで囲むこと--[[です
--]]。
--[[
print(10)
--]]
-- アクションなし(コメントアウト)
この場合、最初の行にハイフンを 1 つ追加することで、コードを再アクティブ化できます。
---[[
印刷( 10 )
--]]
--> 10
最初の例では、--[[最初の行の が長いコメントを開始し、最後の行の 2 つのハイフンはまだそのコメント内にあります。 2 番目の例では、シーケンスは---[[通常の 1 行コメントを開始し、最初の行と最後の行は独立したコメントになります。この場合、 はprintコメントの外側にあります。この場合、最後の行は で始まるため、独立したコメントになります--。
Lua での長いコメントは、これらよりも複雑になることがあります。詳細については、「Long strings」 (Lua でのプログラミング) のセクションを参照してください。
マテリアライズド
MATLABのプログラミング言語 では、'%'文字は1行のコメントを表します。複数行のコメントは%{と%}括弧で指定でき、ネストすることもできます。例:
% これらは各項の導関数です
d = [ 0 - 1 0 ];
%{
%{
(ネストされたコメントの例。インデントは見た目のためで、無視されます。)
% }
テイラーの公式に従って、シーケンスを作成します。ベクトルを操作していることに注意してください。%} seq = d .* ( x - c ) .^ n ./ ( factorial ( n ))
% テイラー近似を得るために合計します
。approx = sum ( seq )
ニム
Nim はインラインコメントに '#' 文字を使用します。複数行のブロックコメントは '#[' で始まり、 ']#' で終わります。複数行のブロックコメントはネストできます。
Nimには、 MarkdownとReStructuredTextマークアップを混在させたドキュメンテーションコメントもあります。インラインドキュメンテーションコメントは「##」を使用し、複数行のブロックドキュメンテーションコメントは「##[」で始まり、「]##」で終わります。コンパイラはドキュメンテーションコメントからHTML、LaTeX、JSONドキュメントを生成できます。ドキュメンテーションコメントは抽象構文木の一部であり、マクロを使用して抽出できます。[45]
## モジュール *ReSTructuredText* と **MarkDown** のドキュメント
# これはコメントですが、ドキュメントコメントではありません。
type Kitten = object ## 型のドキュメントage : int ## フィールドのドキュメント
proc purr ( self : Kitten ) = ## 関数のドキュメントecho "Purr Purr" # これはコメントですが、ドキュメントコメントではありません。
# これはコメントですが、ドキュメントコメントではありません。
オカムル
OCaml はネスト可能なコメントを使用します。これは、コード ブロックにコメントを付けるときに便利です。
codeLine (* コメントレベル 1(*コメントレベル 2*)*)
パスカル、デルファイ
PascalとDelphiでは、コメントは「{...}」で区切られます。コメント行は「\\」で始めることもできます。代わりに、これらの文字をサポートしていないコンピュータの場合は、「(*...*)」を使用できます。[46]
ニクラウス・ヴィルトのより現代的な言語群(Modula-2やOberonを含む)では、コメントは「(* ... *)」で区切られる。[47] [48]
例えば:
(* 対角線をテスト *)
columnDifference := testColumn - column ; if ( row + columnDifference = testRow ) or .......
コメントはネストできます。// は {} 内に含めることができ、{} は (**) 内に含めることができます。
パール
Perlや他の多くのスクリプト言語の行コメントは、ハッシュ (#) 記号で始まります。
# 簡単な例
#
my $s = "Wikipedia" ; # 変数 s を "Wikipedia" に設定します。print $s . "\n" ; # 印刷後に改行文字を追加します
Perlでは通常のブロックコメント構造の代わりに、文芸プログラミングのためのマークアップ言語であるPlain Old Documentationを使用している。[49]例えば: [50]
=item Pod::List-E<gt>new()
新しいリスト オブジェクトを作成します。プロパティは、
次のようにハッシュ参照を通じて指定できます。
私の $list を Pod::List->new({ -start => $., -indent => 4 });
詳細については、個々のメソッド/プロパティを参照してください。
=カット
sub new { my $this = shift ; my $class = ref ( $this ) || $this ; my %params = @_ ; my $self = { %params }; bless $self , $class ; $self -> initialize (); return $self ; }
R
R はハッシュ (#) 文字で始まるインライン コメントのみをサポートします。
# これはコメントです
print ( "これはコメントではありません" ) # これは別のコメントです
楽
Raku (以前はPerl 6と呼ばれていました)は、通常のPerl (上記のPerlのセクションを参照)と同じ行コメントとPODドキュメントコメントを使用しますが、設定可能なブロックコメントタイプ「複数行/埋め込みコメント」が追加されています。[51]
これらはハッシュ文字で始まり、バックティック、開始括弧文字が続き、対応する終了括弧文字で終わります。[51]コンテンツは複数行にまたがるだけでなく、インラインで埋め込むこともできます。
#`{{ このバージョンを「コメントアウト」する
toggle-case(Str:D $s)
文字列内の各文字の大文字と小文字を切り替えます。
my Str $toggled-string = toogle-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 ;
}
/*
これは複数行のコメントです。
これらのコメントはネストできません。
*/
}
パワーシェル
Windows PowerShellのコメント
# 単一行コメント
Write-Host "Hello, World!"
<# 複数
行
コメント #>
ホスト書き込み 「さようなら、世界!」
パイソン
Pythonのインライン コメントでは、次のコードの 2 つの例のように、ハッシュ (#) 文字が使用されます。
# このプログラムはスクリーンに「Hello World」を出力します
( 「Hello World!」) # 新しい構文に注意してください
この記事で定義されているブロックコメントは、厳密にはPythonには存在しません。[52]三重引用符で囲まれた文字列で表される裸の文字列リテラルは使用できますが、[53]「#」コメントと同じようにインタープリターによって無視されることはありません。[52]以下の例では、三重二重引用符で囲まれた文字列はこのようにコメントとして機能しますが、docstringとしても扱われます。
"""
これがファイル mymodule.py であると仮定すると、この文字列は
ファイルの最初のステートメントとなり、
ファイルがインポートされたときに "mymodule" モジュールの docstring になります。
"""
class MyClass :
"""クラスのドキュメント文字列"""
def my_method ( self ):
"""メソッドのドキュメント文字列"""
def my_function ():
"""関数のドキュメント文字列"""
ルビー
Rubyのインラインコメントは# 文字で始まります。
複数行コメントを作成するには、行の先頭に「=begin」を配置する必要があります。その後、行を開始する「=end」までのすべてが無視されます。この場合、等号の後にスペースを含めると、構文エラーが発生します。
「これはコメントではありません」と表示します
# これはコメントです
「これはコメントではありません」と表示します
=開始
これらの行に何が書かれても
人間の読者向けです
=終了
「これはコメントではありません」と表示します
構文
SQL の標準コメントは、2 つのダッシュを使用した 1 行のみの形式です。
-- これは1行のコメントです
-- 2行目が続きます
SELECT COUNT ( * ) FROM Authors WHERE Authors . name = 'Smith' ; -- 注: 必要なのは 'smith' だけです-- このコメントはSQLコードの後に続きます
あるいは、CやJavaの構文で使用されている「ブロックコメント」スタイルと同一のコメント形式の構文が、Transact-SQL、MySQL、SQLite、PostgreSQL、Oracleでサポートされています。[54] [55] [56] [57] [58]
MySQL は、ハッシュ (#) 文字から行末までのコメントもサポートします。
迅速
1 行コメントは 2 つのスラッシュ (//) で始まります。
// これはコメントです。
複数行コメントは、スラッシュとそれに続くアスタリスク (/*) で始まり、アスタリスクとそれに続くスラッシュ (*/) で終わります。
/* これもコメントです
が、複数行にわたって書かれています。 */
Swift の複数行コメントは、他の複数行コメント内にネストできます。ネストされたコメントを書くには、複数行コメント ブロックを開始し、最初のブロック内で 2 番目の複数行コメントを開始します。次に 2 番目のブロックを閉じ、その後に最初のブロックを続けます。
/* これは最初の複数行コメントの開始です。
/* これは 2 番目のネストされた複数行コメントです。 */
これは最初の複数行コメントの終了です。 */
XML (または HTML)
XML(またはHTML) のコメントは次のように導入されます。
< !--
終端文字まで複数の行にまたがることもあります。
-->
例えば、
<!-- ここでコンテキストを選択します -->
<param name= "context" value= "public" />
SGMLとの互換性のため、コメント内では文字列「--」(二重ハイフン)は使用できません。
セキュリティ問題
インタプリタ型言語では、コメントはプログラムのエンドユーザーに表示されます。「コメントアウト」されたコードセクションなど、場合によっては、セキュリティ上の脆弱性が生じる可能性があります。[59]
参照
- Docstring は、プログラムの実行中ずっと解析され保持される特定のタイプのコメントです。
- Shebang 、 Unix 系システム上のスクリプトで#!をインタープリタ ディレクティブとして使用すること
- HTMLコメントタグ
- リテラルプログラミング、代替ドキュメントパラダイム
- さまざまなプログラミング言語におけるコメントの構文
- COMMENT (CONFIG.SYS ディレクティブ)
- REM (CONFIG.SYS ディレクティブ)
注釈と参考文献
- ^ ソースコードは、プログラムコード(機械翻訳可能な命令から構成されます)とコメント(人間が読めるメモやプログラムコードをサポートするその他の注釈が含まれます)に分けられます。Penny Grubb、Armstrong Takang(2003)。ソフトウェアメンテナンス:概念と実践。World Scientific。pp. 7、120~121 ページから始めてください。ISBN 978-981-238-426-3。
- ^ この記事では、プログラミング言語のコメントは、マークアップ言語、設定ファイル、その他の同様のコンテキストで表示されるコメントとは区別されないものとして扱われます。さらに、マークアップ言語は、特にコード生成のコンテキストで、プログラミング言語のコードと密接に統合されることがよくあります。たとえば、 Ganguli、Madhushree (2002) 「Jsp の活用」を参照してください。ニューヨーク: Wiley。ISBN 978-0-471-21974-3。、Hewitt、Eben (2003)。Coldfusion開発者のための Java。アッパー サドル リバー: Pearson Education。ISBN 978-0-13-046180-3。
- ^ Dixit, JB (2003).コンピュータの基礎とC言語によるプログラミング. Laxmi Publications. ISBN 978-81-7008-882-0。
- ^ Higham, Desmond (2005). MATLAB ガイド. SIAM. ISBN 978-0-89871-578-1。
- ^ Vermeulen, Al (2000). Javaスタイルの要素。ケンブリッジ大学出版局。ISBN 978-0-521-77768-1。
- ^ abc 「Java で適切なコメントを使用する」 2000 年 3 月 4 日. 2007 年 7 月 24 日閲覧。
- ^ WR, Dietrich (2003).応用パターン認識: C++ でのアルゴリズムと実装. Springer. ISBN 978-3-528-35558-6。ソースコード内のコメントの適切な使用に関する見解を示しています。p. 66。
- ^ ab Keyes, Jessica (2003).ソフトウェアエンジニアリングハンドブック. CRC Press. ISBN 978-0-8493-1479-7。コメントと「ドキュメンテーションの科学」について論じています (256 ページ)。
- ^ abc プログラミングスタイルの要素、カーニハン&プラウガー
- ^ ab コードコンプリート、マコーネル
- ^ Spinellis, Diomidis (2003).コードリーディング: オープンソースの視点. Addison-Wesley. ISBN 978-0-201-79940-8。
- ^ 「CodePlotter 1.6 – この「Visio のような」ツールでコードに図を追加および編集します」。2007 年 7 月 14 日にオリジナルからアーカイブ。2007年 7 月 24 日に取得。
- ^ ab Niederst, Jennifer (2006). Web Design in a Nutshell: A Desktop Quick Reference . O'Reilly. ISBN 978-0-596-00987-8。場合によっては、「コメント」とプログラミング言語やマークアップ言語の他の構文要素との違いが微妙なニュアンスを伴うことがあります。Niederst 氏は、そのような状況の 1 つとして、「残念ながら、XML ソフトウェアはコメントを重要でない情報と見なし、処理前にドキュメントからコメントを削除することがあります。この問題を回避するには、代わりに XML CDATA セクションを使用します」と述べています。
- ^ 例えば、Wynne-Powell, Rod (2008) を参照。Mac OS X for Photographers: 最適化された Mac ユーザー用画像ワークフロー。オックスフォード: Focal Press。p. 243。ISBN 978-0-240-52027-8。
- ^ ラム、リンダ (1998)。VI エディタの学習。セバストポル: O'Reilly & Associates。ISBN 978-1-56592-426-0。Vim 設定ファイルでのモードライン構文の使用について説明します。
- ^ 例えば、Berlin, Daniel (2006) を参照。Practical Subversion、第 2 版。Berkeley: APress。p. 168。ISBN 978-1-59059-753-8。
- ^ アンブラー、スコット (2004)。オブジェクト入門: UML 2.0 によるアジャイルモデル駆動開発。ケンブリッジ大学出版局。ISBN 978-1-397-80521-8。
- ^ Clojure での docstring による関数定義
- ^ Murach. C# 2005. p. 56.
- ^ c2: ホットコメント
- ^ "class Encoding". Ruby . ruby-lang.org . 2018年12月5日閲覧。
- ^ 「PEP 263 – Python ソースコードエンコーディングの定義」。Python.org。2018年12 月 5 日閲覧。
- ^ Polacek, Marek (2017-03-10). 「GCC 7 の -Wimplicit-fallthrough」。Red Hat Developer。Red Hat。2019年2 月 10 日閲覧。
- ^ Lisa Eadicicco (2014年3月27日). 「Microsoft Programmers Hid A Bunch Of Profanity In Early Software Code」. Business Insider Australia . 2016年12月29日時点のオリジナルよりアーカイブ。
- ^ (例: Linux Swear Count を参照)。
- ^ グッドリフ、ピート(2006年)。コードクラフト。サンフランシスコ:ノースターチプレス。ISBN 978-1-59327-119-0。
- ^ スミス、T. (1991)。Pascalを使用した中級プログラミングの原理とテクニック。ベルモント: West Pub. Co. ISBN 978-0-314-66314-6。
- ^ 例えば、Koletzke, Peter (2000) を参照。Oracle Developer Advanced Forms & Reports。Berkeley: Osborne/McGraw- Hill。ISBN 978-0-07-212048-6。65ページ。
- ^ 「最悪の慣行 - 悪いコメント」。2007年7月24日閲覧。
- ^ モレリ、ラルフ (2006)。Java 、Java、Java: オブジェクト指向問題解決。プレンティス ホール カレッジ。ISBN 978-0-13-147434-5。
- ^ ab 「Javadoc ツールの Doc コメントの書き方」。2007年 7 月 24 日閲覧。Javadoc ガイドラインでは、コメントはプラットフォームにとって重要であると規定されています。さらに、適切な詳細レベルはかなり明確に定義されています。「私たちは、一般的なプログラミング用語の定義、概念概要の記述、開発者向けの例の記載よりも、境界条件、引数の範囲、および特殊なケースの指定に時間と労力を費やしています。」
- ^ Yourdon, Edward (2007).プログラム構造と設計のテクニック. ミシガン大学. 013901702X.コメントが存在しないと、コードを理解するのが難しくなりますが、コメントが古かったり、冗長だったり、間違っていたり、ソース コードの目的を理解するのが難しくなったりすると、コメントが悪影響を与える可能性があります。
- ^ Dewhurst, Stephen C (2002). C++ Gotchas: コーディングと設計における一般的な問題の回避. Addison-Wesley Professional. ISBN 978-0-321-12518-7。
- ^ 「Coding Style」。2007年8月8日時点のオリジナルよりアーカイブ。2007年7月24日閲覧。
- ^ “Allen Holub”. 2007年7月20日時点のオリジナルよりアーカイブ。2007年7月24日閲覧。
- ^ アレン・ホルブ『Enough Rope to Shoot Yourself in the Foot』、ISBN 0-07-029689-8、1995年、マグロウヒル
- ^ Ken Thompson. 「B に対するユーザーの参照」 。2017年 7 月 21 日閲覧。
- ^ 「PEP 0350 – コードタグ」、Python Software Foundation
- ^ 「コーディングの前、後、そしてコーディング中に決して忘れてはいけないこと」、コードタグコメントを生産的な残りとして使用
- ^ 「タスク リストの使用」、msdn.microsoft.com
- ^ 「running-config にコメントを残す」。Cisco Learning Network (ディスカッション フォーラム)。
- ^ 「設定ファイルの管理設定ガイド、Cisco IOS XE リリース 3S (ASR 900 シリーズ)」。
- ^ 「文芸的プログラミング」. haskell.org .
- ^ 「Lua 1.3 でのプログラミング」www.Lua.org . 2017 年 11 月 8 日閲覧。
- ^ マクロ.抽出ドキュメントコメントと実行可能ファイル
- ^ キャスリーン・ジェンセン、ニクラス・ヴィルト (1985)。Pascal ユーザーマニュアルとレポート。スプリンガー・フェルラーク。ISBN 0-387-96048-1。
- ^ ニクラス・ヴィルト (1983)。Modula-2 でのプログラミング。スプリンガー・フェルラーク。ISBN 0-387-15078-1。
- ^ * Martin Reiser、Niklaus Wirth (1992)。Oberonでのプログラミング。Addison- Wesley。ISBN 0-201-56543-9。
- ^ 「perlpod – 昔ながらのシンプルなドキュメント形式」。2011年9月12日閲覧。
- ^ 「Pod::ParseUtils – POD 解析および変換のヘルパー」。2011年 9 月 12 日閲覧。
- ^ ab 「Perl 6 ドキュメント – 構文 (コメント)」。2017 年 4 月 6 日閲覧。
- ^ ab "Python 3 基本構文". 2021 年 8 月 19 日時点のオリジナルよりアーカイブ。2019 年2 月 25 日閲覧。
三重引用符は、複数行にまたがることができる点を除いて、通常の文字列として扱われます。通常の文字列とは、変数に割り当てられていない場合、コードが実行されるとすぐにガベージ コレクションされることを意味します。したがって、#a コメントと同じようにインタープリターによって無視されることはありません。
- ^ 「Python のヒント: 複数行の文字列を複数行のコメントとして使用できます」、2011 年 9 月 11 日、Guido van Rossum
- ^ Talmage, Ronald R. (1999). Microsoft SQL Server 7. Prima Publishing. ISBN 978-0-7615-1389-6。
- ^ 「MySQL 8.0 リファレンスマニュアル」。Oracle Corporation 。 2020年1月2日閲覧。
- ^ 「SQLite による SQL の理解」。SQLite コンソーシアム。2020年1 月 2 日閲覧。
- ^ 「PostgreSQL 10.11 ドキュメント」。PostgreSQL グローバル開発グループ。2020年1 月 2 日閲覧。
- ^ 「Oracle® Database SQLリファレンス」。Oracle Corporation 。 2020年1月2日閲覧。
- ^ Andress, Mandy (2003)。『セキュリティを生き抜く: 人、プロセス、テクノロジーを統合する方法』 CRC Press。ISBN 978-0-8493-2042-2。
さらに読む
- Movshovitz-Attias, Dana および Cohen, William W. (2013)「プログラミングコメントを予測するための自然言語モデル」。Association for Computational Linguistics (ACL)、2013 年。
外部リンク
- コメントの書き方 (デニス・クルコフスキー著)
- PTLogica によるライブ ユーザー マニュアルとしてのソース コード ドキュメント
- Javadoc ツールのコメントの書き方
