自己文書化コード対。コメント付きコード


22

検索しましたが、探しているものが見つかりませんでした。この質問が既に質問されている場合は、お気軽にリンクしてください。

今月初めにこの投稿が行われました:

http://net.tutsplus.com/tutorials/php/why-youre-a-bad-php-programmer/

基本的には、コメントを書かないと悪いプログラマーになります。私の意見では、コードは記述的であり、コードが自己記述的でない場合を除き、ほとんどコメントを必要としないはずです。

与えられた例では

// Get the extension off the image filename  
$pieces = explode('.', $image_name);  
$extension = array_pop($pieces);  

著者は、このコードにはコメントを付けるべきだと述べました。私の個人的な意見では、コードは記述的な関数呼び出しである必要があります。

$extension = GetFileExtension($image_filename);

しかし、コメントでは誰かが実際にその提案をしました:

http://net.tutsplus.com/tutorials/php/why-youre-a-bad-php-programmer/comment-page-2/#comment-357130

著者は、コメンターは「それらの人々の1人」、すなわち、悪いプログラマーであると答えました。

自己記述型コードとコメント型コードについて、他の誰もが見ていることは何ですか?


1
@ピーター-私はその1つを見てみましたが、コメントをコード臭いとして定義するかどうかではなく、2人の間で人々の個人的な意見を得たいと思っていました。
フィル

2
私はその記事を見つけました...読むのは恐ろしいです。とてもin辱的です。
sevenseacat

@カーピー-私はやったか:(
Phill

3
「あなたが悪いPHPプログラマである理由」回答:あなたはPHPでプログラミングしているからです。
トーマスエディング

望ましい方法は、基本的に関数呼び出しを使用してコードをコメントすることです。そのためにコメントを使用しないのはなぜですか?関数は、再利用可能なコードにのみ使用する必要があります。GOTOステートメントが悪であるのと同じ理由で、この方法で書かれた他の誰かのコードを追わなければならないことは個人的に嫌いです-スパゲッティコードを作成します。これは最新のIDEによって改善されていますが、すべての言語とプログラマーがこれらのIDEを使用できるわけではなく、方向感覚を失わせています。正直なところ、一目瞭然ではないコードのセクションをコメントする必要があることに同意します。これにより、コードを非常にすばやく簡単に読むことができます。
ダリン

回答:


46

私は自己文書化コードを書くことを好みます。このガイドはClean Codeです。

もちろん、これはコメントを決して使用してはならないという意味ではありません-それらには役割がありますが、私見では慎重に使用する必要があります。SOに関する私の以前のこの回答は、トピックに関する私の考えをより詳細に説明しています。

もちろん、@ Niphraが指摘したように、私がきれいだと信じていることは他の人に本当に理解できることを常に確認する価値があります。しかし、これも実践の問題です。ユニに戻ると、気まぐれによれば、すべてのコードエンティティに奇妙で面白い名前を使用しているために、不可解なコードを作成しました。私の先生が私の課題の1つを投げ返すまで、どのモジュールがメインであるかわからないことを丁寧に指摘していました:-)これは良い教訓でした。今日、私はチームメートから苦情をほとんど受けません。


私はその本が大好きです:)
Phill

私は今でも、使用された戦略と拒否された人々を(理由とともに)表現するのに貴重なコメントを見つけています。マイクロコメントは一般に役に立たないことに同意します。
マチューM.

9
Clean Codeからの私のお気に入りの引用の1つは、すべてのコメントはコードで自分を表現することの失敗であるということです。
ドーバル14

6
@Doval:少なくとも、コードの機能についてのコメントに関しては、興味深い哲学です。一方、最も有用なコメントには、コードが何しない理由に関するコメントがあります。これは、コード表現することを期待すべきではない概念です。
supercat

1
完全に反対。ロジックの目的を完全に説明するネーミングの量はありません。
コロブキャニオン

65

コードが何をしているかを文書化するべきではありませんが、なぜそれを行っているのかを文書化する必要があります。

命名の裏技で理由と理由が明らかになることはないため、さまざまなコードの目的を説明するコメントを追加する必要があります。

他のすべてのコメントは安全に削除できます。


3
+1リンクされた記事の例では、「私が書いたコードの目的がすぐにはわからない状況でコメントを作成する」と書かれています。- マシン自体には目的の概念がないため、コード自体が目的を伝えることができると考えるのは馬鹿げています。反例:これまでに書かれたほとんどすべてのソフトウェアにバグがあります。これは真実です。コンピューターが目的理由)を理解していれば、バグの原因となったwhat / when / how / whereを忠実に再現するのではなく、単に意図したもの以外のことを拒否します。
デビッドマイスター

関数内のすべてのコードは、関数の目的(つまり、テキストをファイルに書き込む、関数「writeTo(String text、File file)」など)を満たすために存在する必要があります。コードの目的が異なる場合(たとえば、ファイルが存在するかどうかを確認するなど、前提条件を確認し、それが明らかでない場合)、おそらく「checkWritable(File file)」のような新しい関数をコメントで書くのが良いでしょう。コード品質は独断的なチェックリストではありませんが、コメントが必要な場合、それ悪い兆候であり、「理由」はそれらを必要とする正当な理由ではありません。なぜ鶏は道を渡ったのですか?
Trylks

2
@Trylks場合によっては機能しますが、すべてでは機能しません。このシナリオを想像してくださいfor (int i = 0; i < length/2;i++) { //if length is odd, the middle element should stay in place。さて、これは、それを囲む関数の目的から明らかなものではなく、独自の関数に分解することもできません。コメントを外したままにしておくと、明らかに悪いことです。そのため、コメントを追加して意図を明確にします。
-biziclop

2
@Trylksそれに、たとえ例を取り上げても、チェックアウトをメソッドにファクタリングして呼び出します。ここで説明する必要があるのは、ファイルが書き込み可能であることを確認する必要がある理由だけです。:)
biziclop

38

私は実際に自己記述的なコードを信じていませんあり、より読みやすいコード少ない読み取り可能なコードは(原作者として)それのあなたの知識、それを読ん男、およびコード関数の知識は、言語に応じて、。しかし、いや、それでも...短いコメントで説明する必要があります。

私が今はっきりしているのは、私が完全に異なる何かを考えているときにコードのこの部分を再び使用する必要があるときに、私がおそらく1年で私にはその思考領域にいることは明確ではないということです。

だから、あなたのコードをコメントしてください。もちろんすべての行(良い天国、いいえ)ではありませんが、関数/サブルーチン/モジュール、または特に扱いにくい部分の上に数行のコメントを入れて、それが何をするかを簡単に伝えてください。1年か2年で自分に感謝します。


そこに行って、それをしました。「読みにくいコード」は、読みやすいコードに改善する必要があります。言語の知識は実際には重要ではありません。構文に慣れていない場合は、まずそれを学ぶ必要があります-率直に言って、それがプロになるための基礎です。コメントを追加してひどいコードを補おうとするのは得策ではありません。コメントは、コードが何をするのかを説明しようとしてはなりません。(一般)コメントは、whatではなく、whyを伝える必要がある場合にのみ正当化されます。他のすべてはただのノイズであり、維持する必要のない追加のものです。
Powerslave

PS、私はちょっと「ゾンビ」だと知っている:)それはごめんなさい
-Powerslave

混乱を避けるために、ビジネス要件(たとえば、並外れたパフォーマンスや制限されたストレージへの適合)によって悪いコードを書くことを余儀なくされない、通常のケースについて話しています。他の(まれな)ケースでは、コメントを残す以外に選択肢がなく、次の被害者の負担をいくらか軽減します。
Powerslave

19

幸いなことに、この議論の両方の陣営がここに代表され、両方の賛否両論が述べられました。

どちらの陣営も議論が重複しており、実際にそれらのほとんどに同意していると信じています。

重複する引数

  • コードは読み取り可能である必要があります。
  • コメントは、コードとまったく同じことを言うべきではありませんが、必要に応じてさらなる洞察を与えます。
  • すべての変数/関数名は、それらが何であるか/実行されているかを適切に表すために、よく考えてください。
  • 重複コードは防止する必要があります。

現在、主な違いは、これらの引数のいくつかにどの程度の重みが付けられているかです。

自己記述型コード

  • コメントは陳腐化する可能性があるため、間違ったコメントはコメントがないよりも悪いため、コメントの使用を最小限に抑えます。
  • コメントはコードの複製です。コードで記述できるものはすべて、コードで記述する必要があります。

他のコメント

  • コメントはコードより読みやすいです。平易な英語は何かを記述するのに優れています。

  • 単純なコードはあいまいさを引き起こすことが多く、とにかくコメントする必要があります。これをコードで記述しようとすると、名前が長すぎます。さらに、この「余分な」情報に常に直面しているのは、初めて目にするときだけです。

どちらの陣営も非常に有効な論拠を持っていると思いますが、1つの問題を解決したからといって、1つの陣営を必死に追うべきではありません。

デモンストレーションのために、本Clean Codeでは、コードは一度しか呼び出されない多数の小さなメソッドに分割されています。メソッドは、コードを文書化する唯一の理由で作成されます(TDDがより簡単になります)。これにより、Function Hellが生成されます。コードは当初よりも読みにくくなり、リファクタリング中は、再利用可能なコードをカプセル化することは考えられませんでした。

一方、「コメントが良い」という理由だけで、すべての機能がコメント化されているAPIをよく目にします。コメントすべきだったものはまだそうではありません。


1
@Steven-「一方で、「コメントが良い」という理由だけで、すべての関数がコメントされるAPIをよく目にします。コメントされるべきものはまだありません。」うーん、とてもイライラして本当です!
dss539 14年

これは非常に良い答えです!コメントの読みやすさについて気にしない場合は、コメントの読みやすさを個人的に信じていません。開発者として、私たちは通常、特に「コーディングモード」の場合、ソースコードで考えます。それらの瞬間に、普通の人間の言語の曖昧さは、通常、助けというよりも気を散らすものです。
Powerslave

5

「ごめんなさい、あなたのあの男」

彼がコメントを好まないのはなぜだろうか:P

真剣に、コーディングは芸術のようなものであり、そのような抜本的な発言を正直に行うことができません。コメントが必要な場合もあれば、名前の付いたより良い関数が必要な場合もあります。通常両方。

リテラシープログラミングを極端なスタイルとして探します。


うん。つまり、Donald Knuthがあなたにコメントが必要なだけでなく、時にはそれらのが必要だと思っているなら、私は反対する前に少なくとも2回は考えているでしょう。
-PeterAllenWebb

3

短く、より良く、正しい答え

よく書かれた「自己文書化されたコード」が必要なのはアンチパターンであり、「なぜ」を説明するコメントの例外を作成する場合でも死ぬはずです。それは、プログラマーがそれを一見して取得するのに十分な明確なアルゴリズムのすべてのコードを常に書くことができるという神話です(または、リファクタリングや組織の時間を必要としません)。さらに重要なことは、多くの場合、明確なコードを書くと考えるプログラマーはそうではないということです。

コメントよりもはるかに優れた答えは、「理由」を説明するためにのみ使用する必要があります。

  • 「なぜ」を説明する(もちろん)
  • コードが複雑であるか、目的が不明であり、さらに単純化することができない、またはする価値がない場合にのみ、個々の行で「何」を説明する
  • 理解をスピードアップし、必要なものを見つけるためのコードブロックの「何」を説明する

バックアップの説明

人々は、コメントを使用する唯一の理由はコード行の意味を説明することであると誤って考えています。真実は、コードをコメント化する大きな目的は、コードをより速くすることであるコードをひと目で確認して、探しているものを見つけることができます。後でコードに戻ったり、他の人のコードを読んだりすると、よく書かれたコードのセクションを読んで理解できますが、上部のコメントを読んでコードのそのセクションが何をするかを言うのが速くて簡単ではありませんそれが私が探しているものではない場合は完全にスキップしますか?いくつかのコメントを見て機能全体を理解できるのであれば、なぜそれがうまく書かれていても、そこに座ってコードを理解するのですか?だから私たちは関数に説明的な名前を使用しています-私の関数に説明的な名前を使用する必要がないと言う人はいません。

たとえば、他の人の関数を調べている場合、コードを1行ずつ実行して何をしているのかを簡単に確認したり、関数全体で3つのコメントを一目で確認して、関数が何をしているか、どこでやってる?

別のアンチパターンは、コードをコメントするための関数の過剰使用です。適切な名前の関数はコード文書化の重要な部分ですが、プログラマーは文書化の目的で他のどこにも使用されないコードを2〜3行分離することがあります。コメントを過度に使用するよりも、機能を過度に使用する方が良いのはなぜですか そのような関数を使用することは、GOTOステートメントを受け入れることと同じです。スパゲッティコードが作成されるので、これを追うのは面倒です。

基本的に、人々が絶えずコードを共有していて、常にコードを完璧にする時間がないというエンタープライズ環境で作業するとき、いくつかの良いコメントは時間とフラストレーションを節約できます。そして、覚えておいてください、あなたは光速でコードを読むことができる第一人者かもしれませんが、おそらくあなたのオフィスの全員がそうではないでしょう。


人々が賛成票を投じるのが嫌いで、その理由をコメントも残さない。投稿全体を読みましたか?そこには簡単で真実ではないものは何ですか?何に反対しますか?人々は自分の考えや読んでいるものに固執しているので、それについて考えさえせず、自分の意見を共有しないものはすぐに投票するでしょう。
ダリン

3
私は、あなたが完全に拒絶し、アンチパターンにほぼ普遍的に正しいと認識されている何かに名前を付けるからだと思います。行き過ぎだと思います。ほとんどの場合、私はあなたのようにコメントを信頼することを想像することはできません。コードではなく盲目的にコメントを読んだ場合、コメントが間違っていて古くなっている可能性があり、あなたは決して知りません。これが関数をドキュメントとして使用する基礎です。1つの場所にあまり多くの関数があってはならないことに同意しますが、それに対する解決策は間違いなくそれらをコメントに置き換えることではありません。
メイガス14

@Magusコメントありがとうございます。関数をドキュメントとして使用するという私の話を参照していると思います。それを読み直して、その目的のために関数を使用することを意味するように聞こえるのは悪いと言いました(その目的のための関数の使いすぎとは対照的です)。元の意図を明確にするために、その段落を整理しました。コメントを信頼することについての私の考えは、コメントが時代遅れになった場合、それは通常、コードセクションのコメントが狭すぎるというサインです-意図ではなく実装をコメントしているということです。
ダリン14

but isn't it faster and easier to read the comment at the top saying what that section of code does and skip it altogether if it's not what I'm looking for「メソッド/関数の名前」と呼ばれます。名前はないが、一目でそれを取り入れることができないほど長いコードのブロックを持っている場合、問題がそこにあるのかもしれません。
-biziclop

1
@biziclop Overtimeこの議論はほとんどセマンティクスであり、実際には、私たちのコードは似ていると思われるようになりました。とはいえ、コードのブロックが複数の場所で使用されていないと仮定すると、上部に短い説明的なコメントのあるコードのブロックと、短い説明的な関数名のあるコードのブロックの違いは見られません上。それらはスペースがないことを除いて同じです。どちらも間違っている可能性があり、古くなっています。私が実際に見る唯一の違いは、別の場所への関数呼び出しに従う必要がないため、コードはコメント付きで読みやすいことです。
ダリン

2

まあ、あなたはあなたにとって明白な、または「自己文書化」されている何かを覚えておく必要があります。だから私はすべてについてコメントします。


1
例を挙げてください。私の元の質問で例を示したということです。「GetFileExtension」は、「特定のファイルのファイル拡張子を取得する」というコメントのポイントを示していますか?このメソッドは、コメントに入れるべきものをすでに説明しています。メソッドに「GetExtension」という名前が付けられている場合、メソッドはそれ自体を説明していないため、コメントはメソッドが何をすべきかを明確にするのに役立ちます。
フィル

+1これは聴衆に知っている質問です。この機能を使用する可能性があるのは誰ですか?どうすれば彼らを助けることができますか?あなたの助けは何の価値がありますか?コメントを追加するのに少し時間をかけるよりも価値がありますか?等等
-PeterAllenWebb

2
@PeterAllenWebb:そのコメントにはまったく意味がありません。それは、関数がコメントされるべきではないことをリモートで意味するものではありません。そうすべき。「拡張子」にはドットが含まれますか?戻り値は"foo"何ですか?(null""?)のために"foo."?渡すとnull例外が発生しますか、または関数が何かを返しますか(おそらくnull)?
TJクラウダー

2

さて、自己文書化コードのことは、その関数内で、あなたが見つけるだろうということです:

$pieces = explode('.', $image_name);  
$extension = array_pop($pieces);  

関数名は2行しかないため、関数名がある場合は自明です。事態がさら​​に複雑になった場合、関数内のコードの数行ごとにわかりやすい名前を付けるか、必要に応じてコメントを使用する必要があります。

and / andの代わりにor / orである理由を理解できませんでした。はい、可能な限り自己文書化するコードを作成し、はい、そうでなければかなり不明瞭になる部分にコメントを追加します。


うん。両方ではなく、どちらか一方である必要があると考えるには、「トレーニング」する必要があると思います。
-PeterAllenWebb

2

コメントと自己文書化されたクリーンコードは異なります。コードはすべて物事を行う方法についてです。そしてコメントは、あなたの言語が何であれ、コードでは説明できないwhy部分をカバーするべきです。また、言語が非常に限られており、契約も静的な仕様もアサーションさえも持っていない場合、コメントはコードの境界の問題をカバーする必要があります。


すべての理由があると仮定して、コメントする必要がありますか?
-JeffO

はい、正確に。だからこそ、コードにコメントする最良の方法は文芸的プログラミングであると信じています。
SKロジック

1

その場合、記述関数を作成するのは簡単です。しかし、私は自分のコードが自己文書化されていると信じていた優秀なプログラマーによって作成された多くのコードを読みました。

$ extension = GetFileExtension($ image_name);

あなたの例に戻るために、私はそれに画像名の配列を送ることができますか、それは1つの画像だけを取りますか?あらゆる種類のファイルをサポートしていますか、それとも一部のみをサポートしていますか?それは私のために文字列を保護しますか、または私はそれをしなければなりませんか?ファイルの種類が存在しない場合、通知されますか?

もちろん、私はこれを少し伸ばしています。しかし、audio_bandwidthとvideo_bandwidthは自己文書化された名前だと信じていたプログラマを覚えています。オーディオはバイト単位で、ビデオはキロバイト単位で表現する必要がありました。それを理解するのに多くの時間を費やしました。


5
あなたはそれをたくさん伸ばしています。関数はファイル名拡張子を取得します。これ以上のことはありません。その名前は、配列を取るかどうか(明らかにそうではない)を示しています。ファイルの種類に依存して拡張子を取得する方法は考えられません。組み込まれる可能性があるのは文字列の保護だけですが、PHP開発者が知っているように、すべてのユーザー入力が疑わしいので、使用する前に保護してください。
マットエレン

2
@Matt:「明らかにない」ということは、メンテナンスを頻繁に行わないことを示しています。明示的であることは、後で頭を悩ます(およびRTFSource)ことを大幅に節約し、元の作者それを行うことを期待したことも文書化します。コメントにあるのか、長い関数名にあるのかはそれほど重要ではありません。
ドナルドフェローズ

たぶん、この質問で使うのは悪い例だったかもしれません。私は約7年間PHPに触れず、C#とほんの少しのJavaをやっていたので、型が返されるか、または型を宣言します。
フィル

1
@Donal Fellows:単数形でファイルを言います。それについて何が曖昧ですか?完全に明示的です。
マットエレン

4
4人から7つの回答があり、単一の関数呼び出しの自明性などについて議論しているという事実は、コメントを使う必要があることを示唆しています。また、正確な命名はそれ自体が芸術形態であるという事実を強調しています。
アリ

1

一方は他方を除外しません。コードは自己コメントですが、自己コメントコードが何をするのを説明するために定期的なコメントが必要な場合があります。


これは、「コードは記述的であり、コードが自己記述的でない限り、ほとんどコメントを必要としない」という私の意見に当てはまると思います。うまく書かれているが、コードの意図を十分に説明していないコードを書く場合、コメントはコードをよりわかりやすくするのに役立ちます。
フィル

コードはその目的を説明できません。あなたがハンマーを見たとき、あなたはそれが何であるかを理解することはできません-それは頭蓋骨を粉砕するためか、生の鉄を鍛造するためだけのものですか?
SKロジック

1
@ SK-logic:public <T> void hit(T item);
マイケルK

@マイケル-まさに。ユーザーがどのように把握するのか、どのカテゴリのオブジェクトをハンマーで打つことができ、また打つべきか はるかに優れた型システムであっても、常に明確とは限りません。実際にどのような範囲で使用できるかは、開発者によって計画されています。
SKロジック

1

私はその記事に同意せず、ある程度あなたに同意します。適切なメソッド名、適切な変数名、単一のことを行う小さなメソッドを使用する場合、コードは簡単に理解できるはずです。

賢いコードは恐ろしい読み取りと保守なので、賢くならないようにしてください。キーワード:メンテナンス

私の意見では、コメントは何ではなく理由を説明すべきだということです。この架空の完璧な世界では、コードは読みやすいように十分にきれいであり、何をしているのかを説明する必要はありませんが、なぜこのようにしたのか、そのようにしたのかを覚えておいてください。

ソース管理システムを使用している場合は、コミットメッセージを使用して、特定の時間に何をしたか、さらに重要なのはなぜかを全員(および自分自身)に知らせることができます。


1

ドキュメントを避けたいのと同じように、コメントを書くことは避けたいでしょう。プログラミング言語自体に関して言えば、誰もが(ほぼ)同じ語彙と構文のセットから操作しています。

アプリが特定のドメイン向けである場合、全員が共通の語彙に同意したり、確立したりすることは困難です。略語や広範な専門用語を避けるように教えられていますが、私はそれを呼ぶつもりです

EBITDA

ではなく

EquityBeforeInterestTaxes減価償却費

一方がわからない場合、おそらくもう一方は理解できないでしょう。会社に一般的でない実装がある場合、コメントはドメインでの経験があるかもしれない次のプログラマに役立ちますが、この特定の企業には役立ちません(これは単に事態をより複雑にします)。


1

ドキュメントとコードの表現性を区別する必要があると思います。

コードをデバッグまたはレビューするときは、本を読んでいません。ほとんどの場合、メソッドからメソッドにジャンプして、実行時に何が起こっているかについての基本的な理解を得るために頭の中で素早く接続したいだけです。コードに関する文書化ではなく、表現力そのプロセスで重要は、コードに関するコード署名のであり、それらをすぐに識別して独自の内部呼び出しスタックに追加できるほど有意義である能力です。その時点で、私たちの脳(少なくとも、私の脳はそのように動作します;))は、大きなコメントブロックを助けではなくノイズと見なす傾向があります。したがって、ここでは1行のコメント、またはさらに良いことに、自己記述的なメソッド名とオブジェクト名で十分です。

特定のクラスまたは機能の「本を読みたい」場合は、ユニットテストを使用することをお勧めします。適切に設計された単体テストは、本来は意図を明らかにし、最も厚いコメントブロックよりもはるかに多くの文書化(つまり、説明、詳細)です。実際のコードに対するこれらの期待。合格したテストは、それが主張するものが真実であることを証明するため、ドキュメントの点でどのコメントよりも100倍信頼性があります。


1

一部のコードは自己文書化されておらず、その部分を理解してテストした仲間の人間からのコメントが必要です。私が下に持っているものはそれを理解するのに十分ではありません、と思います。

//
// iterative version
//
Node* ReverseList( Node ** List ) 
{

  Node *temp1 = *List;
  Node * temp2 = NULL;
  Node * temp3 = NULL;

  while ( temp1 )
  {
    *List = temp1; //set the head to last node 
    temp2= temp1->pNext; // save the next ptr in temp2
    temp1->pNext = temp3; // change next to privous
    temp3 = temp1;
    temp1 = temp2;
  }

  return *List;
}

1

ほとんどのコードは完全に文書化されないと思うので、私は一般的に、コメントが不明確な自己文書化コードを書くことを好みます。


0

大学では、英語でコードのすべての行をコメントで言い換えることを教えられました(おそらく、何かをコピーして貼り付けて最高のものを期待するのではなく、実際にコードが何をするのかを理解する習慣を身に付けるためです)。

個人的に、あなたのコードから地獄を散らかし、それを減らすと思いますそれが単なるコメントまたは単なるコードである場合よりも読み。私はC#コーダーであり、常にコメントを書くのは、「トリプルスラッシュ」コメントブロックのみで、IntelliSenseドキュメントに戻されます。何かを行う特定の方法について特に罪悪感を感じている場合、または特に不可解に見える場合は、さらに説明しますが、それはそれについてです。

IMO:自己文書化コードとは、変数名とメソッド名に意味のあるコンテキスト名が付けられたコードで、その目的を説明するものです。


0

コードを何度も再訪しても、ドメインを知っている人に意図を明確にする方法をまだ見つけていない場合。関数を書き直してください。結局、それは10〜20行以下です。とにかく関数をより長く書き換える場合は長くなり、それが読めない理由の一部です:)リンスリピート

まれに、コードが何をしているのかまだ不明であり、同僚に助けを求めることを忘れていません。それでは、あなたが書いているカーネルコードだから、Linuxの進化を助けてくれてありがとう。上からすすぎ繰り返しない場合:)

コメントを書いてはいけません


0

Code Complete 2nd edition、pg 128-129をご覧ください。

抽象データ型は、この難問からあなたを救います。自己文書化コードは行く方法です。コメントは便利ですが、

低レベルの実装ではなく、実際のエンティティ

コメントの使用を避けることができます。

コメントに関する1つのことは、コメントを1回書くだけですが、関数を実装するときは表示されず、関数を変更するときにのみ表示されることです。

コメントは、Delphi 2009+またはJavaDocが機能する方法でIDEによって解釈される場合に非常に役立ちますが、それは構造化マークアップ言語に近いため、ドキュメントをプログラミングしているという意味では非常に賢明です。


0

私は、コードはそれ自体を文書化しないという信念を信じています、なぜならあなたは世界で最高のプログラマーになる可能性があるからです(Ada)あなたのコードがそれをどのように行っているか、あなた自身と他の人を将来支援するつもりです。


0

コメントは必須です。あなたがコードを書くとき、あなたはあなたの現在のニーズのために書いているだけでなく、あなたのコードを読まなければならない将来の人々のためにも書いているので、wtfを理解していて、あなたは何をしているのか、そしてなぜそれを修正するのか。

コーディング/プログラミングの際にこれを念頭に置いているのですか?

私が取り組んでいるこのコードの将来のコーダーのためにこれを理解しやすく変更するにはどうすればよいですか?あなたは良い仕事をしているでしょう。それに失敗すると、他の人がコードを変更するのを難しくするだけで、決してそうではないと想像しないでください、それはまれです...

私の仕事のほとんどで、私は常に他の人のコードを修正しなければならず、最も恐ろしく書かれていて、文書化が不十分でした。

したがって、コードド​​キュメントを自分自身と考える習慣は、デューデリジェンスを行っていないだけです。

プログラマーとして、私たちは、経験の浅いプログラマーに完全に似ているように見えるかもしれないが、習慣を持たなければならない自己規律を実践しなければなりません。または、数か月後、数か月後の独自のコードを見ることさえできます。

http://thedailywtf.comをチェックしてください。彼らは、デューデリジェンスを行わなかったプログラマーについてのユーモラスでありながら本当の話をたくさん持っています。

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