///コメントブロックが重要な理由


49

誰かがすべてのメソッドの前に/// <summary>コメントブロック(C#)を付けるべきだと言ったことがありますが、その 理由は説明しませんでした。

私はそれらを使い始め、それらが私をかなり悩ませるので、ライブラリと静的メソッドを除いてそれらの使用を止めました。それらはかさばり、更新するのをいつも忘れています。

/// <summary>コードでコメントブロックを使用する正当な理由はありますか?

私は通常//、常にコメントを使用します/// <summary>。それは、私が考えていたブロックだけです。


1
これらのコメントブロックは、個人の好みや推奨規格だった場合、私はわかりませんでした
レイチェル

1
私もそう思う。
ライアンヘイズ

30
これはまさにここに属する種の質問だと思います。これは主観的であるため、これがstackoverflowで閉じられる可能性が十分にあります。
Paddyslacker

ドキュメントを生成する場合は、<summary>ブロックを使用します。これは、他の人が使用するAPIを作成している場合に意味があります。すべての方法でこれを行うのはやり過ぎであり、柔軟性が低下します。
マクニール

回答:


91

可能な限り使用してください。

はい、これらはメソッドのドキュメントとなる特別なコメントです。<summary>生成された、コンテンツタグなどのコンテンツは、ユーザーまたは他の誰かがメソッドを呼び出す準備ができたときにインテリセンスに表示されます。ファイル自体にアクセスして何をするのかを理解することなく(またはメソッドシグネチャを読み取って最善を尽くすことなく)、メソッドまたはクラスのすべてのドキュメントを本質的に見ることができます。


22
+1絶対に使用します。コンポーネントを再利用し、その優れたドキュメントをすべてインテリセンスで入手できる場合、それらを使用するのがどれほど便利であるかに驚くでしょう。
ウォルター

4
また、Visual Studioを使用しており、クラス、メソッド、またはフィールド宣言の直前に///で行を開始する場合、VSはXMLドキュメント構造を生成します。入力するだけで済みます。画面の多くのスペースがありますが、それは私が言うに値する妥協です。また、F#はそれをより良くサポートします(たとえば、<summary>と</ summary>は「想定されている」ため使用する必要はありません)。
ShdNx

7
この答えはすでに最良の選択であるため、コメントを追加します。サマリーがインテリセンスに使用され、プロジェクトが現在のサイズに成長したことがわかったとき、この機能を見つけて非常に嬉しかったです。メソッドとクラスの目的を思い出すことは大きな課題となり、このメカニズムを使用してコードを文書化することで物事が大幅に簡素化され、数か月前に行われたことを思い出そうとせずに新しいコードと再利用性に集中できます。
JYelton

3
追加する必要があるのは、これらのコメント dllにコンパイルされないため、関連するxmlファイルをdllと共に配信する必要があることです。
ベンジョー

これらは便利ですが、現在のクラスを非常に読みにくくします。コードを乱雑にしない別の方法があればいいのにと思います。
イェーロン・ヴァン・ランゲン

16

はい、保持したいものや共有する可能性のあるものには絶対に使用してください。

また、SandcastleおよびSandcastle Help File Builderと組み合わせて使用​​すると、XML出力を取得して、美しいMSDNスタイルのドキュメントに変換できます。

私が最後に働いた場所では、毎晩ドキュメントを再構築し、内部ホームページとしてホストしていました。会社のイニシャルはMFであったため、MFDNでした;)

通常、私は.chmファイルを作成するだけですが、簡単に共有できます。

MSDN形式で見始めたら、すべてを文書化することに夢中になって驚かされるでしょう!


1
ブログへのリンクは死んでいるようで(5年前の最後の投稿で、ページ全体にhtmlが壊れています)、プロジェクトの場所が移動しました。Sandcastleの更新されたリンクはありますか?

12

コーディング標準がそのようなコメントを使用することを要求する場合(およびAPIまたはフレームワークのコーディング標準がそれを要求する場合)、選択の余地がないため、そのようなコメントを使用する必要があります。

そうでない場合は、そのようなコメントを使用しないことを真剣に検討してください。ほとんどの場合、次のようにコードを変更することでそれらを回避できます。

    /// <summary>
    /// Checks if a user is authorized to access the resource
    /// </summary>
    public bool SecurityCheck( User user ) {

    }

    /// <summary>
    /// Checks if a user is authorized to access the resource
    /// </summary>
    public bool IsAuthorizedToAccessResource( User user ) {

    }

    public bool IsAuthorizedToAccessResource( User user ) {

    }

11
コードはできる限り頻繁に自己文書化する必要があることに同意しますが、可能な限りこれらのタイプのコメントを使用することをお勧めします(一般的な//コメントよりも頻繁に)。/// XMLコメントは、IntelliSenseと連携するように設計されています。これにより、ビルドしたライブラリを実装しようとして数か月後に開発が容易になり、それがどのように機能するかをまったく思い出せなくなります。
マットディトロリオ

2
また、IntelliSenseの観点だけでなく、自動ドキュメント生成の観点からも、xmlコメントは便利だと思います。しかし、すべてのコメントと同様に、これはコメント自体が有用であり、自己文書化されたコードに追加されている場合にのみ意味があります。
バイバブ

5
APIまたはフレームワークのパブリッククラスを作成する場合、コーディング標準では、IntelliSenseおよびドキュメントツールがプラグインできるように、コードにコメントを入力することを要求することに同意します。しかし、それはすべてのコードではありません。その懸念とは別に、私がここで提唱しているアプローチは、コードをより明確かつ明確にしようとするとき、コードを説明するコメントではなく、コード自体に焦点を合わせることです。
アジェグロフ

3
@JYelton:あなたのコメントは私の答えを誤って伝えています。私はよりわかりやすい名前を暗示しましたが、必ずしもより冗長な名前ではなく、頻繁に呼び出されるパブリック関数の60文字の識別子ではありません。また、高度に特殊化された関数と思われるものもありますが、非常に一般的なデータ型(XmlDocument)を使用します。これは1つのコードの匂いです。次に、60文字の識別子は、パブリックメソッドの「what」ではなく「how」を記述します。それは別の匂いです。主なメッセージは次のとおりです。コメントではなくコードについて最初に考えてください。
アジェグロフ

2
@JYeltonメソッド名の問題は、それが説明的であるということではなく、少なくとも2つの別個の操作を説明しているため、少なくとも2つの独立したメソッドにリファクタリングする必要があります。
ニール

4

クラス、メソッド、およびプロパティの命名は自明である必要があるため、これらが必要な場合は、おそらく臭いです。

ただし、API、ライブラリなどのパブリッククラス、メソッド、およびプロパティで使用することをお勧めします。少なくとも、彼らはそれを使用する開発者を支援するドキュメントを生成し、それらを書くために。

しかし、とにかくそれをスライスしたり、メンテナンスしたり、削除したりします。


11
命名は1つのことですが、パラメーターの制約または潜在的にスローされる例外をリストすることは依然として価値があります。
アダムリア

はい、私はあなたにポイントがあることを認めますが、ほとんどの場合、パラメータの制約は明らかですよね?
ジョンマッキンタイア

私はジョンに同意しません。このロジックを使用すると、どの.netフレームワークメソッドもIntelliSenseヘルプを取得できません。
バイバブ

1
@vaibhav-「API、ライブラリなどのパブリッククラス、メソッド、およびプロパティでそれらを使用することをお勧めします...」と言いました。
ジョンマッキンタイア

1
@ジョン-奇妙なことに、そのコメントを書いたときに、何か他のものを全部読んだと誓ったかもしれない。2番目の段落は、このスレッドの他の部分で述べたとおりです。だから、私はそのコメントを書くために私の頭に岩を持っている必要があります。はい、私はそれに同意します。
バイバブ

2

戻って新しいコードに対応するためにコメントを編集し続ける必要があることがわかった場合、そもそも間違ったコメントをしている可能性があります。要約要素には、要約-要約するものの内容理由を正確に含める必要があります。

コメントで何かがどのように機能するかを説明すると、DRYに違反します。コードが十分に自己記述的でない場合は、戻ってリファクタリングする必要があります。


1

はい、作成しました。[新しいシステムをゼロから構築する場合]

いいえ、私はそれらの恩恵を受けたことはありません。[メンテナンスが必要な既存のシステムで作業する場合]

「概要」コメントは、最終的にコードと同期しなくなる傾向があることがわかりました。そして、いくつかのひどい振る舞いのコメントに気づくと、そのプロジェクトに関するすべてのコメントに対する信頼を失う傾向があります。どのコメントを信頼すべきかはわかりません。


古いコメントはコードの匂いと見なすことができますが、要約レベルではさらにそうです。他の開発者が機能を変更していて、彼らがしていることの要約を更新していない場合、彼らは彼らの仕事を正しく文書化していないと主張することができます。
rjzii

1

何かをするのを忘れても悪い考えにはなりません。ドキュメントの更新を忘れるのは、そうです。これらは私のプログラミングで非常に有用であり、私のコードを継承する人々はそれらを持っていることに感謝しています。

これは、コードを文書化する最もわかりやすい方法の1つです。

インラインドキュメントを読むためにソースコードを見つけたり、コードが何をするかを調べるドキュメントを掘り下げたりするのは苦痛です。インテリジェンスを通じて何か有用なものがポップアップ表示されると、人々はあなたを愛します。


1

私と同じように、とても使わなければなりません;)

以前はコメント(///)で遊んでいました。クラスの場合、次のようなコメントを入力するだけです。

namespace test
{
    /// <summary>
    /// Summary description for Calendar.
    /// </summary>
    public partial class DatePicker : System.Web.UI.Page
    {

ただし、メソッドの場合は、パラメーターと戻り値の型の説明を追加して、アドオンを追加できます。

/// <summary>
/// Assign selected cases to the participating users based on the filters and configurations
/// </summary>
/// <param name="noOfParticipants">No. of participants to the Table</param>
/// <param name="value">Value of the participant</param>
/// <returns>No Of Cases Assigned on successfull completion</returns>
public long AssignCasesToParticipatingUsers(int noOfParticipants,string value)
{

このコメントを作成するためのショートカットを使用できます(///+Tab)


0

ライブラリを除いてそれらを使用する

それは彼らが役に立つ時間です。XMLドキュメントの生成を有効にすると、プロジェクトなしでアセンブリへの参照がインテリセンスでより詳細に表示されます。

しかし、現在のプロジェクトの内部については、彼らは邪魔をします。


0

私はそれらを使用しますが、他の人が普遍的に言っていないように。小さなメソッドの場合は、説明しているコードよりも簡単に大きくなります。これらは、システムを初めて使用する人に提供できるドキュメントを生成するのに最も役立ち、学習中に参照することができます。とはいえ、プログラマーとしては、通常、いくつかのコードが何であるかを突き止めることができます。それは場合は持っているコードで、その後どこかに書き留めなければ、それが最も可能性が高い(可能性が高い漂っいくつかのWord文書より)更新滞在することです場所です。


0

私はVBで同等のものを使用します(C#を使用させないため-明らかに難しすぎます...コメントはありません)。ほとんどの場合、コメントを変更する必要がないようにするため、または「非同期」にするためだけに、プロシージャまたは関数が完了する前にそれらを挿入するまで待機します。

私は必ずしも小説を書いているわけではありません-基本、パラメータの説明、いくつかの発言(通常はそこに「普通ではない」ことが起こっているとき) 「今のところ」選択はありません。)(ええ、私は、「今のところ」は何年も続くことを知っています。)

コメントなしのコードにひどくイライラしています。コンサルタントが私たちのコンポーネントの1つの初期バージョンを作成し、何もコメントせず、彼の名前の選択はあちこちで望まれています。彼は1年以上経ちましたが、私たちは彼自身のものを整理しています(私たち自身のものに取り組むことに加えて)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.