コメントはドキュメントの形式と見なされますか?


11

自分用に小さなスクリプトを作成しているときは、コードをコメントでスタックします(コードよりもコメントが多い場合があります)。私が話している人の多くは、これらのスクリプトは個人的なものであっても、文書化する必要があると言っています。しかし、コメントはドキュメントの形式ではありませんか?

これではないでしょう:

$foo = "bar"; # this is a comment
print $foo; # this prints "bar"

特に開発者が私のコードを使用している場合、ドキュメントと見なされますか?または、ドキュメントはコード自体の外にあると見なされますか?


11
JavaDocsやDoxygenなどのドキュメント生成システムを使用している場合、コメントは文字通りドキュメントです。
Gort the Robot

5
YANGNI(xprogramming.com/Practices/PracNotNeed.html)。満足のいくようにコードを文書化します。顧客に(もしあれば)お金を払って、満足のいくように文書を作成してもらいます。あなたが話している多くの人々が言うことを心配しないでください(彼らがあなたに支払っていない限り)。
エモリー

1
あなたの2つのコメントのうち、2番目は役に立たないので、$ fooをbarに置き換えてみませんか。これが真実でない場合、コメントは間違っています。最初のコメントは間違っています。それは課題です。
ctrl-alt-delor

2
コメントを追加したい場合は、コメントを必要としないようにコードを変更してください。すべてがドキュメンテーション、コードはドキュメンテーション、コメントは通常、[追加の]情報がないか、間違っています。何を意図するか(コードコントラクトはこれに役立ちます)、およびその理由を文書化します。ドキュメントをコードの近くに置き、コメントを使用します。ドキュメントに対するドキュメント:ドキュメントに対するコメント、コメントに対する明確なコード。
ctrl-alt-delor

2
YANGNIは「あなたはそれを必要とするつもりはない」
クリスS

回答:


27

コメントは間違いなくドキュメントです。ほとんどのプロジェクトでは、コメントは(残念ながら)プロジェクトドキュメントの主要な形式(だけでなく)です。このため、正しく理解することが非常に重要です。コードを変更しても、このドキュメントが正確であることを確認する必要があります。これはコメントに関する一般的な問題です。開発者は、使い慣れたコードで作業しているときにそれらを「調整」することが多いため、コードを反映するためにコメントを更新するのを忘れています。これにより、古くて誤解を招くコメントが作成される可能性があります。

多くの人々は、コードを自己文書化することを提案しています。つまり、コメントの代わりにコードを再構成して、コメントを不要にすることができます。これは、「何を」と「どのように」のコメントのほとんどを取り除くことができますが、「なぜ」コメントを実際には助けません。これはほとんどのコメントを取り除くために効果的に機能するかもしれませんが、コメントを書くことがコードの一部を文書化する最も簡単で最も効率的な方法である多くの場合がまだあります。


3
「ほとんどのプロジェクトでは、コメントはプロジェクトドキュメントの主要な(それだけではないにしても)形式です。」-これに反対票を投じたくなりますが、残念ながらそれは真の声明として認められなければなりません。これがそうあるべきであると主張するのはあなたの意図ではないのですが。
エドワード・ストレンジ

2
あなたが持っている唯一の信頼できるドキュメントはソースコード自体なので、私はこれに本当に同意しません。コメントと「ドキュメント」の両方をコードで維持する必要がありますが、これはめったに起こりません。したがって、ドキュメントの唯一の信頼できるソースはあなたのコードです!
Martiert

3
@martiert私は以前と同じように感じていましたが、これは実際には実際にはうまく機能しないことがわかりました。これらの「なぜ」コメントはすべて、コードから「なぜ」知識を抽出しようとするよりも、コメントとしてはるかに明確です。自己文書化コードは、ほとんどのコメントを削除するために使用できます(使用すべきです)が、コメントは、何かを文書化するための最も単純で、最も明確で、最も時間効率の良い方法である場合があります。
Oleksi

3
@martiert自己文書化コードの問題は、他の場所での文書への参照を許可しないことです。私が今まで見た中でコードの中で最高のコメントのいくつかは、使用されたアルゴリズムの詳細や魔法の定数の選択を説明した学術論文への参照でした。自己文書化の量は、一部の重要な文書が単なる明白ではないという事実を回避するのに役立ちません。「なぜ」はしばしばこのカテゴリーに該当し、時には「方法」も該当します。
ドナルフェロー

3
また、コメントは、多くの言語で、実際のドキュメントを生成するために使用されることに注意してください。そのため、コメントは多くの場合同じものです。例としてMSDNを参照してください。
Steven Evers

12

それらはドキュメンテーションの一種ですが、ドキュメンテーションは見る人の目にあることを忘れないでください...

  • 一部では、自己文書化コードで十分です。しかし、それは顧客としての技術的詳細のレベルを前提としています。私たちのエゴは「このコードが何をしているかは明らかです」と私たちに告げるかもしれないが、時間がそうでなければ証明できるので、私たちはこれで十分であると慎重に考えるべきです。また、読者のスキルを事前に知っていることも前提としています。

  • ソースコードを見ているが、技術的な専門知識が少ない人にとっては、コメントは大丈夫かもしれません。しかし、それは誰かがソースコードを見ていることを前提としています。

  • あなたが技術的だが、すべてのソースコードを読む時間が足りない場合は、技術マニュアルが必要かもしれません。

  • ユーザーが技術的なスキルを欠いているが、何が起こっているかを知る必要があるだけの場合、ユーザーのドキュメントが必要です。

だから本当の問題はあなたの顧客は誰ですか?もしそうなら、自己文書化コードまたはコメントで十分です。それが他の誰かのためのものである場合、文書化の方法を広げることができます。


17
自己文書化コードは嘘です。
yannis

1
@YannisRizos完全な嘘というより、達成不可能な目標のようなものです。
Ptharienの炎

2
@YannisRizos:あなたは正しいかもしれませんが、たくさんのコメントを必要とするコードは、ほとんどの場合非常に悪いコードであり、コメントが少なくて済むように書かれる可能性があります。
Doc Brown

9
@DocBrownに依存します。私はループについてドキュメント化している人を見てきましたし、ビジネスロジックの100の範囲が自己ドキュメント化されていると主張している人を見てきました。事実は、過剰なコメントは害にならないことです(廃止された/正しくない場合を除く)。過剰なコメントと自己文書化コードのどちらかを選択する必要がある場合は、常に最初のものを選択します。もちろん、私は、Oleksiが説明するように、バランスのとれたコメントを好みます。
yannis

1
@MathAttackほとんどのまともなIDEはコメントを非表示/折りたたむことができます。しかし、はい、時々彼らは邪魔をします。
ヤンニス

3

はい、コメントはドキュメントの形式です。それらがあなたのコードを維持または更新しなければならない人にとって有用なドキュメントであるかどうかは、未解決の問題です。

私はあなたがそれを使い捨ての例として意味したことを知っています、しかしのようなもの

print $foo; # this prints "bar"

役に立たない。視覚的な混乱を追加するだけです。明白な文書化しないでください。

ブロック(関数やメソッドの目的を記述した方法または関数定義の先頭のコメントハイレベルの観点から)、入力、出力、戻り値(もしあれば)、例外(もしあれば)、前提条件、および事後条件は有用であり、ただし、関数またはメソッドがどのように使用されることになっているのかを誰かに伝える程度に限られます。彼らはなぜ関数が存在するの説明していません。

他の誰かがコードを保守する必要がある場合は、要件と設計をどこかに文書化する必要があります。これは通常、ソースコード自体では行われません


3

Clean CodeによるBob Martinのこれに対するアプローチに固執することで、通常、コメントしすぎているのか、コメント不足でドキュメントを省いているのかという問題が解決されます。

私たちは作家です。そして、作者についての1つのことは彼らが読者を持っているということです。実際、作者は読者とうまくコミュニケーションする責任があります。次にコード行を書くときは、あなたが作者であることを覚えておいてください。あなたの努力を判断する読者のために書いてください。

...読み取りと書き込みに費やされた時間の比率は10:1をはるかに超えています。新しいコードを書く努力の一環として、常に古いコードを読んでいます。

言い換えれば、あなたのコードはドキュメントがなければ自明でしょうか?Microsoftのように、ドキュメントが公開されている誰かのために働いているのでない限り、そのための規則はありません。ほとんどの場合、将来のコードリーダーを手助けすることになります。


2

ドキュメントには、なぜではないのを文書化する必要があります。どのようには自明のコードでは、それは一般的にoccuringされていないいくつかの難解な最適化のトリックや他の言語固有の技術でない限り、あるべきです。

なぜが、おそらくコードにすべきではない、それは変更ログやブランチ名で検索することができ物語IDとコメントをコミットするために結ばれている製品バックログ、同様にどこか別の場所でなければなりません。


1
本当にトリッキーなものは、学術論文(または、時折、特許)にあるべきです。
ドナルフェロー

2

コメントはドキュメントの形式です。劣った形式、およびより因数分解できるコードの領域を見つけたことを示唆する形式。

強引にコメントしているようですね。他のオプションを持つことは良いことかもしれません。私は3つの優れた形式のドキュメントを考えることができます。

1)コードをよりよく因数分解します。コメントを追加するのではなく、記述しようとしているコメントのテキストを名前とするメソッドまたは関数を抽出します。したがって、コードはあなたのコメントがこれから言うことを言っています。

2)テスト。これは、私が通常検索するドキュメントの形式です。単体テストと受け入れテストは生きた文書であり、ポイント1のように、意図を表現するために多くの意味のある方法が使用されている場合は、簡単に読むことができます。

3)スクリプトの場合、-helpオプション。これは、あなたがドキュメントに夢中になれるところです。例に固執し、ユーザーが必要とするものを予測します。

要約すると、コメントにこだわる傾向がある場合は、コードをより適切に構造化することにより、リーダーと通信する方法があるかどうかを確認してください。または、そのコードが存在する理由を伝えるテストはありますか?それでもコメントしたいと思うなら、敗北を認め、それを実行してください。

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