コメントを書くための初心者向けガイド?


27

開発者の発芽を目的とした、コードコメントの作成に関する決定的なガイドはありますか?

理想的には、コメントをいつ使用するべきか(使用すべきではない)、およびコメントに何を含めるべきかについて説明します。

この答え

何をしているのかをコメントしないでください。

WHATは、それをサポートする変数名を適切に選択した、クリーンで読みやすいシンプルなコードによって処理されます。コメントは、コード自体では表示できない(または表示が難しい)コードの上位レベルの構造を示します。

近づきますが、経験の浅いプログラマーにとっては少し簡潔です(いくつかの例とコーナーケースでの拡張は素晴らしいと思います)。

更新:ここでの回答に加えて、別の質問に対するこの回答は非常に関連性が高いと思います。


私たちは、人々がもはやコメントしない世界に急速に動いていると思います。より良い(より可能性が高い)より悪い。アジャイル。
MK01

1
@MK:その場合(私はこの答えにもっと同意する傾向があります)、コメントを書かない方法とコメントを避けるべき理由を説明するガイドも同じように役立ちます。実際のところ、視点が異なるほど良い。
キャメロン

コードの読み取り速度を改善するための小さなコメントは非常に役立ち、常に役立つと思います。「古いコメント」の推論を完全に購入するわけではありません。たとえ古いものであっても、歴史的な価値があるでしょう。私はコードベースで作業していたことがありますが、コードベースにはあちこちで詳細なコメントがありますが、コメントが古くなっていることに本当に噛まれませんでした。
MK01

回答:


38

コメントの最大の弱点に注意する必要があります。コメントは古くなっています。つまり、コードの変更に伴い、開発者がコメントを更新してコードとの同期を保つことはめったにありません。これは、あなたがそれらを決して信用できず、それでもコードを読むことになってしまうことを意味します。このため、コードは自己文書化する必要があります。コードが散文のようになるように、関数名と変数名を選択する必要があります。

そのため、コードが実行していることを文書化しないでください。自己文書化コードがそれを処理する必要があります。あなたがそれをしている理由を文書化してください。WHYは通常、ビジネスルール関連またはアーキテクチャ関連であり、頻繁に変更されることはなく、WHATですぐに失効します。ドキュメントエッジケース。例外を文書化します。設計の決定を文書化します。そして最も重要なことは、あなたが考慮したが、実装しないことに決めた設計上の決定を文書化します(そして、それらを使用しないことに決めた理由を文書化します)。


2
最後のものは非常に重要です。明らかな解決策の実装にバグ/副作用がある場合があります。他のソリューションを選択した理由を文書化することで、次の開発者は、一見貧弱なソリューションを「修正」するときにバグを再導入できなくなります。
CaffGeek

2
別の点として、私の最初の仕事はコメントをコードと同じくらい重要だと考えていました。査読の際にコードと同様にコメントを読む習慣を身につけ、可能な限りコメントが最新のものであることを主張するようにしてください。これにより、コメントが古くなるのを防ぎ、ビジネスルールなどをコード内で最新の状態に保ちます。
エリックヒドリック

10

Robert C. MartinのClean Code bookを読んでください。コメントが必要な場合は、適切にコーディングしていない可能性が高いと説明されています。理想的には、コードは「自己コメント」である必要があります。Clean Coderの本は、これを行う方法を説明しているため、コメントは不要であり、必要な状況でコメントを行う方法については十分に説明しています。(複雑な数式を説明するなど)


複雑な数式を説明するのはあまり適切ではありませんが、適切な数学表記(おそらくTeX)で記述し、その重要性とソースを説明たいと思います。数式を理解していない場合は、とにかく何らかの値を計算するためにそれを使用するコードをいじってはいけません。
CVn

コードは、なぜ、またはそうでないではなくどのようにだけ言うことができます。そのためのコメントが必要です。

7

前述のように、Code Completeにはコメントの作成に関するさまざまなガイドラインがあります。つまり、PDLであり、次のように要約できます。

  1. コードが何をしているかではなく、あなたの意図を説明してください。何らかのトリックを使用している場合、またはカスタム実装を使用している場合を除き、実装の詳細を説明しないでください。たとえば、シフトするビットを使用して分割したり、ポインター演算を使用してクラスメンバーにアクセスしたり、一部のプールされたオブジェクトにカスタムメモリアロケーターを使用したりします。

  2. 擬似コード(つまり、コメント)を最初に記述し、ルーチン/メソッド/関数の記述が終了したら、実際のコードを記述します。使用されている言語は高レベルでありながら特定であるため、かなり冗長になる可能性があります

  3. コードを記述する前でも、コードが何をしているのかを把握する

  4. 実際のコードに近いコメントを付ける

目標は、古くなっている可能性のある関係のない長いコメントを避けることですが、コードの意図と目的を反映したコメントを持つことです。高レベルの擬似コードを使用すると、実装を記述する前に考えを明確にするのにも役立ちます。

この本を追跡したくない場合のために、GameDev.netには[PDLを説明する] [1]のリンクがあります。


5
最初に擬似コード(つまり、コメント)を記述します。私はこれ以上異議を唱えることはできませんでした。コメントがコードと一致しないことを保証するより良い方法はありません。新しいコーダー(および初心者ガイドを特に求めている質問者)は、関数に満足する前に関数を100回ハッキングおよびリファクタリングし、コードを迅速に移動し、書き直し、再目的化し、最後にエレガントで実用的なソリューションがありますが、初期の擬似コードとはまったく異なります。コードが機能するようになると、コメントは移動および更新されますか?あなたは彼らがしないあなたの甘いbippyを賭けることができます。私の2セント。
バイナリの心配

1
また、擬似コードのコメントは、コードが何をすべきかを教えてくれます。コードはそれを教えてくれるはずです。擬似コードでは、コードがそれを行っている理由はわかりません。-1人、申し訳ありませんが、2番目のポイントに同意することはできません、時間が変更されました。
バイナリの心配

1
議論するのではなく、より多くの説明-擬似コードは、あなたが書いたコードの意図を説明することです。つまり、コメントは実装の詳細(「スタックの最上部にxを追加する」など)ではなく、コードが何をすべきか(「ウィンドウを他のすべての前に表示する」など)についてです。正しく指摘したように、コードと共にコメントを移動する必要があります。私は、コードが何をしているのかを常に伝えることができることに同意しません。たとえそうだとしても、役に立つ/正確なコメント(私がそれをうまく書けば!)は大いに役立ちます。最後に、まだ私見。
Extrakun

3
呼び出されるメソッドまたは関数showWindowOnTop(window)は、常に同じ性質のコメントよりも優れています。これはすべて2012年の時代遅れであり、悪いアドバイスです。1)関数/メソッド名は意図を説明します。テストでは、コードを記述する前に何を行うべきかが


1

私の提案は、コメントなしでいくつかのコードを記述し、それから離れることです。1年後にそれに戻って読んでください。簡単に理解できない部分は、コメントすべき部分です。


1
ええ、はい;-)これは特に役立つアドバイスではありませんが、おそらくこれはコメントだったはずですか?
キャメロン

理解できない部分は、より小さな名前のより良い名前の部分で書くべきでした。コメントがコードに入れられる主な理由は、関数/メソッドが長くなる方法であり、多くの小さな自己文書化の断片であるべきだということです。

0

Evan Toddが唯一の有用なコメントカテゴリ(彼のブログから引用)に関する彼の見解を要約する方法が本当に好きです。

  • 何ではなく、理由を説明するコメント。これらは最も便利です。
  • 次の巨大なコードが何をするのかを説明するいくつかの単語を含むコメント。これらは、ナビゲーションと読み取りに役立ちます。
  • 各フィールドの意味を説明する、データ構造の宣言内のコメント。多くの場合、これらは不要ですが、概念をメモリに直感的にマッピングすることができない場合があり、マッピングを説明するためにコメントが必要です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.