以下の記述のいくつかは、かなり正当化されているものの、非常に個人的なものであり、このように意図されています。
コメントの種類
簡単なバージョンの場合...コメントを使用します。
- データ構造内のフィールドを説明する末尾のコメント(それらは別として、実際には単一行のコメントは使用しません)
- ブロック上の例外的または目的指向の複数行コメント
- ソースから生成された公開ユーザーおよび/または開発者ドキュメント
詳細と(おそらくわかりにくい)理由については、以下をお読みください。
末尾のコメント
言語に応じて、単一行コメントまたは複数行コメントを使用します。なぜ依存するのですか?これは単なる標準化の問題です。Cコードを書くとき、私はデフォルトで昔ながらのANSI C89コードを好むので、常に持っていることを好みます/* comments */
。
したがって、私はほとんどの場合これをCで、そして時々(コードベースのスタイルに依存します)Cのような構文を持つ言語のために:
typedef struct STRUCT_NAME {
int fieldA; /* aligned trailing comment */
int fieldBWithLongerName; /* aligned trailing comment */
} TYPE_NAME;
Emacsはすてきで、それを私に提供しM-;
ます。
言語が単一行コメントをサポートし、Cベースではない場合、単一行コメントを使用するようになります。そうでなければ、私は今習慣を取っていることを恐れています。簡潔にする必要があるため、必ずしも悪いわけではありません。
複数行コメント
これは視覚的に魅力的であるため、単一行のコメントを使用するあなたの教訓に同意しません。私はこれを使用します:
/*
* this is a multi-line comment, which needs to be used
* for explanations, and preferably be OUTSIDE the a
* function's or class' and provide information to developers
* that would not belong to a generated API documentation.
*/
それともこれは(私は、多くの場合、それ以上、個人的なコードベースの上またはほとんど著作権表示を除くことはありません-これは私のために歴史的で、私の教育背景から来ているオートフォーマットを使用した場合残念ながら、ほとんどのIDEがそれを台無しに。) :
/*
** this is another multi-line comment, which needs to be used
** for explanations, and preferably be OUTSIDE the a
** function's or class' and provide information to developers
** that would not belong to a generated API documentation.
*/
本当に必要な場合は、後続の位置で使用することが理にかなっている場合は、後続のコメントで前述した内容を使用してインラインでコメントします。たとえば、非常に特殊なリターンケースの場合、またはswitch
のcase
ステートメントをドキュメント化する(まれに、switchをあまり使用しない)場合、またはif ... else
制御フローでブランチをドキュメント化する場合。それがこれらのいずれでもない場合、通常、関数/メソッド/ブロックのステップの概要を説明する範囲外のコメントブロックは、私にとってより意味があります。
ドキュメンテーションコメントをサポートしない言語でコーディングする場合を除いて、これらを非常に例外的に使用します(以下を参照)。その場合、それらはより一般的になります。しかし、一般的な場合、それは本当に他の開発者向けであり、本当に目立つ必要がある内部コメントであるものを文書化するためだけのものです。たとえば、「強制」catch
ブロックのような必須の空のブロックを文書化するには:
try {
/* you'd have real code here, not this comment */
} catch (AwaitedException e) {
/*
* Nothing to do here. We default to a previously set value.
*/
}
これはすでに私にとっていですが、状況によっては容認します。
ドキュメントのコメント
Javadoc&al。
私は通常、それらをメソッドとクラスで使用して、特にパブリックAPIの場合は機能を導入する(または変更する)バージョンを文書化し、いくつかの例を提供します(明確な入力と出力のケース、および特殊なケース)。これらを文書化する方がユニットケースのほうがよい場合もありますが、ユニットテストは必ずしも人間が読めるものではありません(DSLの使用に関係なく)。
すべてのドキュメント生成フレームワークが後続のドキュメントコメントをサポートしているわけではないので、このために後続のコメントを好むため、フィールド/プロパティをドキュメント化するために少しバグがあります。たとえば、Doxygenにはありますが、JavaDocにはありません。つまり、すべてのフィールドに一番上のコメントが必要です。とはいえ、ほとんどの場合、Javaの行は比較的長いので、私はそれを乗り切ることができます。そのため、末尾のコメントは、許容範囲を超えて行を拡張することで同じように忍び寄ります。Javadocがそれを改善することを検討するなら、私はもっと幸せになるでしょう。
コメントアウトされたコード
Cライクな言語で1つの理由だけで単一行を使用します(厳密なC用にコンパイルする場合を除き、実際には使用しません):コーディング中にコメントアウトする。ほとんどのIDEには、単一行のコメント(インデントまたは列0に揃えられている)のトグルがありますが、これはそのユースケースに適しています。複数行のコメントにトグルを使用する(または一部のIDEでは行の途中で選択する)と、コメント/コメント解除を簡単に切り替えることが難しくなります。
ただし、SCMのコメントアウトされたコードに反対しているため、コミットする前にコメントアウトされたチャンクを削除するため、通常は短命です。(この質問に対する私の答えは、「編集済みのインラインコメントとSCM」にあります)
コメントスタイル
私は通常書く傾向があります:
- ドキュメンテーションコメントの正しい文法(句読点を含む)を含む完全な文。これらは、後でAPIドキュメントで、または生成されたマニュアルの一部としても読まれるようになっています。
- 適切にフォーマットされているが、複数行のコメントブロックの句読点/大文字の制限が緩い
- 句読点なしの後続ブロック(スペースのため、通常はコメントが短いものであるため、括弧で囲まれたステートメントのように読みます)
Literate Programmingに関する注意
Donald Knuthがこの論文で紹介したように、Literate Programmingに興味を持ちたいかもしれません。
読み書きのできるプログラミングパラダイム[...]は、コンピューターが課す方法と順序でプログラムを書くことから遠ざかり、代わりに、プログラマーが論理と思考の流れによって要求される順序でプログラムを開発できるようにします。2 Literateプログラムは、エッセイのテキストのように、普通の人間の言語での論理の中断のない説明として書かれています[...]。
読み書き可能なプログラミングツールを使用して、読み書き可能なソースファイルから2つの表現を取得します。1つはコンピューターによるさらなるコンパイルまたは実行に適した「絡み合った」コード、もう1つはフォーマットされたドキュメントとして表示するものです。識字ソース。
サイドノートと例:underscore.js JavaScriptフレームワークは、私のコメントスタイルに準拠していないにもかかわらず、適切なドキュメントコードベースと整形式の注釈付きソースの非常に良い例です。ただし、 APIリファレンス)。
これらは個人的な慣習です。はい、私は奇妙かもしれません(そしてあなたもそうかもしれません)。それのOK、限り、あなたのように従うと、あなたのチームのコード規則に準拠し、ピアで作業する場合、または根本自分の好みを攻撃しないとcohabitateきれい。それはあなたのスタイルの一部であり、あなたをコーダー(またはあなたがつながりを持っている考え方や組織の信奉者)として定義するコーディングスタイルを開発することと、一貫性のためのグループの慣習を尊重することとの間に細かい線を見つける必要があります。
:3,7 Align //
を揃える:Align.vimとdo を使用して、3〜7行目にコメントを揃えます。