明確にするためのコーディング標準:コードのすべての行をコメントしますか?


142

私は、命に関わるソフトウェアを製造する店で働いており、コードを読みやすくして潜在的に命を救うことを意図したコメントルールに対処しました。私の経験では、この要件はチェックリストにチェックを入れるのは頭の痛い雑用になり、理解可能なコードを書くことに集中し続けるのに役立ちません。また、ピアレビューアが、コードを理解しやすくする方法について、より有意義な会話をすることを妨げます。

また、コメントのない学生コードを評価し、それらを無視するためにマークダウンする必要がある理由を確認しました。

適切な名前を使用し、構造をシンプルにし、機能を短くし、モジュールに焦点を当てると、コメントを最小限に抑えることができるほど十分にコードを理解しやすくなります。

また、コメントは、コードが方法ではなく、コードが実行する理由を説明する必要があることも理解しています。

このすべてを考えると、このアイデアをキャプチャする良いコーディング標準を書くことさえ可能ですか?ピアレビューに関連するものの、「42行目にコメントするのを忘れた」以上の有用なメモを生成する、気まぐれなチェックリストアクティビティにならないもの。

このルールがチェックリストの行として扱われる場合に必要となる種類のコードの例:

/* Display an error message */
function display_error_message( $error_message )
{
    /* Display the error message */
    echo $error_message;

    /* Exit the application */
    exit();
}

/* -------------------------------------------------------------------- */

/* Check if the configuration file does not exist, then display an error */
/* message */
if ( !file_exists( 'C:/xampp/htdocs/essentials/configuration.ini' ) ) {
    /* Display an error message */
    display_error_message( 'Error: Configuration file not found. Application has stopped');
}

これを標準文書で適切に表現することができ、そうでない場合は、これらの線に沿ってアイデアをキャプチャしたいと思います。

コードのすべての行、シーケンス、ステートメント、セクション、構造、関数、メソッド、クラス、パッケージ、コンポーネントなどのコメントを検討してください。次に、コメントを削除できるように、名前の変更と簡素化を検討して、そのコメントの必要性を排除します。コメントはまれですが、チェックインしてください。締め切りまで繰り返します。その後、さらに繰り返します


21
コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
maple_shaft

32
「コメントは拡張討論用ではありません」コードコメントに対しても真実です。:)これらの/* Display an error message */コメントは恐ろしく、実際に読みやすさに影響します。
アンドレアラザロット

IDEにはコメントを非表示にするオプションが必要です。ブロックコメントとインラインコメントの両方を個別に隠すオプションかもしれません。この方法では、両方のオプションのベストを持っています。たくさんのコメントを入れますが、それらを非表示にしてコードをすっきりと整頓された状態に保つオプションがあります。
ダグ。マクファーレン

1
@ Doug.McFarlane vimには存在すべきだと思いました。もちろん、ファイルレベルとブロックレベルの両方で実行されます-rtfm-sarl.ch/articles/hide-comments.html
マイケルデュラント

回答:


171

Michael Durrantの答えは私見では悪くありませんが、それは文字通り質問に答えているわけではありません(彼が自分で認めたように)ので、私はそうする答えをしようとします:

また、コメントは、コードが方法ではなく、コードが実行する理由を説明する必要があることも理解しています。

このすべてを考えると、このアイデアをキャプチャする良いコーディング標準を書くことさえ可能ですか?

明らかに、次のような質問を含むコードレビューのチェックリストを書くことができます

  • 「コメントがある場合、コードが何をするのかを説明していますか?」
  • 「コードの各行は、そのコンテキストでは、コメントを必要としないほど自明であるか、そうでない場合、そのギャップを埋めるコメントが付随していますか?または(できれば)コードを変更できますか?もうコメントは必要ありませんか?」

必要に応じて、これを「コーディング標準」と呼ぶことができます(または、コーディング標準という用語をブレインデッドルールのリスト用に予約すべきだと思う場合は、それらが満たされているかどうか、コードのフォーマットがまたは変数を宣言する場所のように見えるはずです)。簡単なルートをたどって正式なルールのみを入れるのではなく、意味論的な質問にチェックリストの焦点を合わせるのを妨げるものはありません。

一日の終わりには、チームがそのようなチェックリストを必要としていることを確認する必要があります。このような質問を適用するには、レビュアーとしての経験を持つプログラマが必要です。専門家チームでコードの可読性が本当に向上するかどうかを調べる必要があります。しかし、それはあなたのチームと一緒に解決しなければならないものです。


45
誰がこれを支持しましたか?これは、重要なソフトウェア開発のための答え。これは、ほとんどのプログラマーが働く場所とは異なる世界です。これらの世界では、コードのすべての行に独自のコメントを付けることを要求するコーディング標準は正しい答えではありません。どちらもコメントを控えています。コードレビューの対象となるコメントを作成するOTOHは、重要なソフトウェアにとってまさに適切な種類の標準です。コードのレビューと保守がより容易になりますが、これにはコストがかかります。不十分に書かれたソフトウェアに起因する数百万ドルの訴訟と比較して、そのコストはわずかです。
デビッドハメン

4
賢明な答え。コーディングの真のルールを見つけることができれば、プログラマーは必要ありません。マシンのコードを取得するだけです。それは起こり得る!:(

4
@DavidHammen:コメントありがとうございます。実際、これは「重要なソフトウェア開発」だけに当てはまるとは思いません。何年もの間、多くの場合異なる人々によって保守および進化されるすべてのソフトウェアは、次の保守プログラマーにとって理解しやすいものであることの恩恵を受けます。
ドックブラウン

5
これは、さまざまな人が管理するコードだけでなく、あらゆるコーディングに適したアドバイスです。スクリプト/プログラムを使用しているのがあなただけであるとしても、1年後にコードを変更しなければならない将来は、明快さ(および不透明なコードを解読する必要がないことによって節約される時間)に感謝します。
アンソニー・ジョゲガン

5
「現在最も支持されている答え」をより客観的なものに編集していただけますか?すべての読者がこれらの回答の投票履歴を知るわけではありません。
candied_orange

151

明快さの低い低品質コードにつながる主要なアンチパターン

読者の皆さん、タイトルはもともと「すべてのコード行にコメントしますか?」そして、あなたは私も含めて私たちの多くの本能的な反応を想像することができます。後でより正確なタイトルにタイトルを変更しました。

最初に、私が思ったあなたの質問を読んで、コメントに重複するものを見つけますが、多分、複数の人によるレビューに十分な制限がある場合は...違いがあることになります。熟考すると、問題ははるかに大きいと思います:

開発者はより悪いコードを書く傾向があります。「コメントで説明されている-参照してください!」ので、彼らはより不可解な名前と構造を使用します。

考慮してください:

living_room_set = tables + chairs.

今考慮してください:

set = tbls+chrs # Make the set equal to the table plus the chairs

謎めいた名前と読みやすい名前の両方を持っているだけでなく、前後を見て、コードを見て、セットとは何ですか?コードを左に、コメントを右に、tblを左に、コードを左に、コメントを右に、chrsを右に、コメントを右に見てください。おい!

概要

開発者としてあなたの現在の地位に追い込まれた場合(以前のCOBOLプログラミングとしては間違いなく大きなものを見たことがある!)引数を使用したパターン:

  • 1つだけが変更されると、コードとコメントは互いに同期しなくなります

  • コメントは、ある人が考えていることを説明するかもしれませんが、間違っている可能性があるため、バグを隠蔽する可能性があります

  • コードが読みにくくなります

  • 良いコードは書くのが難しくなります

  • より不可解な名前を使用する傾向

  • コードとコメントで読むには過剰な文字

  • 異なるエディターは異なるスタイルを使用します

  • 単なるコーディングよりも高い英語能力が必要

  • 時間とリソースを消費し、長期的な価値から差し引く *

さらに、そのようなコメントなしでより良いコードを主張します -実際には標準(!)があります-すべての変数名はfull_english_wordsでなければなりません したがって、その「標準」エネルギーを、適切に記述されたコードとテストの標準に向けて使用してください。

2つの難しい問題の1つは、名前の付け方です-コメントで問題を無視しないでください。

他の問題の1つが時期尚早な最適化であり、一般に最適化により「なぜこのように」コードが不明瞭になる可能性があることを考えると、これは上記の警告がまだ当てはまりますが、明らかに貧弱なコードに対する説明コメントが有益な可能性がある領域です。

* 明日コード


8
あなたが質問に答えたとは思わない。問題は、すべての行にコメントを付けることではありません。開発者にコードをコメントするように指示する方法を求めています。
hichris123

7
ええ、私は特定の標準の質問に答えているのではなく、代わりに人々がそのルートをたどらないようにしようとしています。これは、特定の質問への答えではないかもしれないが、コメントにレイアウトすることは困難である貴重なアドバイスが含まれていません。
マイケルデュラント

1
他の難しい問題は何ですか?
デビッドグリンバーグ


1
コメントを回避するあなたの理由のそれぞれに反論することができますが、StackExchangeは私がここでそれらすべてに対処するのに十分な長さのコメント(heh)を許可しません。単純に:オーバーコメントは有権者詐欺のようなものです。実際に発生しますが、非常にまれです。最後に実際に見たのはいつですか?良いコメントを書くことは、単に後から付け加えられるべきではありません。正しく行われれば、開発プロセスに役立ちます。はい、リソースが必要ですが、見返りはより良いコードです。より良い変数の命名標準のためにコメントを犠牲にすることで、同じ額の利益を得ることができなくなります。はい、すべての行にコメントするのは簡単です。
kmoser

23

コーディング標準文書は、すでに常識であるものを指定する場所ではないと思います。コーディング標準の目的は、合理的な人々が同意せず、命名規則、インデントなどの明白な正しい答えがない問題について、一貫性を保証する(および引数を避ける)ことです。

あなたの例のようなコメントは客観的には役に立たず、経験の浅い開発者、またはコメントの存在を機械的にチェックするビルドシステムで作業していた開発者が原因かもしれません(本当に悪い考えですが、存在します)。どちらの場合でも、解決策は教育であり、おそらくコードレビューによるものです。

コーディング標準にあらゆる種類の「ベストプラクティス」を追加し始めると、複数の本ですでに述べられていることを繰り返すことになります。問題の開発者に「Clean Code」、「Code Complete」、「The Pragmatic Programmer」を購入するだけで、コーディング標準を無駄にしないでください。


63
このラケットで40年以上後に学んだ多くのことの1つは、常識はまったく一般的ではないということです。
ジョンR.ストローム

10
常識のようなものはありません。
whatsisname

1
in_programming no .. real world oh yeahしかし、実世界の経験豊富な知識の単なる用語
マイケルデュラント

@ JohnR.Strohm:私の経験はあなたよりもずっと前向きですが、機械的に強制する規則によって常識の使用を積極的に阻止する方法も見ました。
ジャックB

私はこの答えに99.9%同意しています。コーディング標準は、開発者がCode Reviewで議論が起こったときに指摘するものとなることを目的としています。コードレビューは、戦争を開始するのではなく、製品を充実させることを目的としています。私が見た多くの戦争は、コーディング基準のないコードレビューによって引き起こされました。コーディング標準の項目のチェックを自動化できない場合は、そこにあるべきだと思います。コードレビューとは、経験の浅い他の開発者に「常識」を伝えるときです。変数の命名をめぐって争う時ではありません。linuxの/カーネル/ gen_init_cpio.cライン335
アンドリュー・T Finnell

19

それは不可能。あなたが本質的にやろうとしていることは、ほとんど良い判断を機械化することです。

生命維持医療システムなどの重要なソフトウェアを作成する場合、膨大な量のチェックリストなどが必然的に避けられません。賢い人でさえミスをするだけでなく、これらのデバイスのソフトウェアの多くは仕事が苦手な人によって書かれているので、「システム」はずさんな仕事から身を守ることができなければなりません。市場性の費用。

あなたの最良の選択肢は、コメントのために厳格なコーディング標準を省き、例によってチームをリードすることです。適切にコメント化された高品質のコードを生成するように努めることで、他の人に良いコメントがどのように見えるかを示します。コメントの書き方を説明する究極の方法を見つけるのではなく(それ自体が判断の呼び出しよりも頻繁に行われます)、他の人に自分のコードレビューで毎日の意味を示します。他のメンバーがあなたのコードを読むとき、彼らがそれが有用であると感じるならば、彼らはそれに続きます。そして、もしそれができないなら、そもそもより良いコメントを書くのを助けるスタンダードはありません。


1
「あなたは良い判断を機械化しようとしている」ための+1、「あなたの唯一の選択肢は最善を願うことです」、そしてそれは私に投票をさせないままにします。 チームの教育トレーニングもオプションです。標準判断可能にします。
ワイルドカード

1
@Wildcardおそらく、スタンダードがどのように判断を可能にするのか説明できますか?その時点でそれはガイドではないでしょうか?基準とは、「比較評価の尺度、基準、またはモデルとして使用されるアイデアまたはもの」です。本質的に主観的なものをどのように使用できますか?だから、主観的なものは、それを誰が読んでいるかに依存して、品質の尺度として使用できますか?
アンドリューTフィネル

1
@Wildcard:問題は、規制された産業に参入するとき、プロセスがすべてを支配することです。プロセスを持つことは、プロセスが価値があるかどうかよりも重要です。すべてを何らかの形式のチェックボックスに要約する必要があり、すべてのチェックボックスは具体的かつ検証可能でなければならず、チェックボックスに余裕があるほど、監査に煩わされるリスクが高まります。
-whatsisname

それは奇妙な世界であり、ルールはソフトウェアドメインの知識がほとんどない官僚によって書かれていることを念頭に置いてください。また、品質の高い製品を保証するための手段ではなく、正当化して自分自身を必要とするシステムが存在することがよくあります。
-whatsisname

1
@whatsisname理解している人が他にいるのはとてもうれしいです。あなたの回答は、私が今まで努力していたよりもエレガントで正確に書かれています。ステートメントwith systems that exist to justify and require themselves rather than being a means to an end to ensure quality productsはまさに私が説明しようとしていたものです。私の言葉を見つけてくれてありがとう。私は本当にそれを意味します。品質を誘導するという考え方と、プロセスを実行するという考え方は同じではないので、区別する必要があります。これが、QA、Stackoverflow、および非常に寛容な顧客がいる理由です。
アンドリューTフィネル

14

更新

強調のための引用符での私の応答:

コメントはコーディング基準で扱われるべきではなく、それと戦うための一連の防御的な質問をリストするべきであると答えるのが唯一の正しい答えであると私は信じています。

ここでの問題は、コーディング標準がまさにその標準であることです。非常に主観的なアイデアは、コーディング標準に含まれるべきでありませ。ベストプラクティスガイドに記載されている場合もありますが、コードレビュー中に開発者に対して使用することはできません。私の意見では、コーディング標準はできる限り自動化に近いものでなければなりません。コードレビューでは、すべてを自動化できる場合、命名、間隔、タブ、ブラケット、コメントなどについて議論するのに多くの時間が無駄になります。さらには約解答して自動化することができます。LINT'ersは、辞書、概念ごとの大文字チェック(変数、関数、メソッド、クラスなど)を許可します。tableschairs

プルリクエストが受け入れられる前に、JavaDocチェックでさえロボットLINT'erによって実装できます。多くのオープンソースプロジェクトがこれを正確に行っています。プルリクエストを送信すると、コードは静的分析を含むTravis-CIファイルで構築され、客観的に表現できるすべてのコーディング標準に合格する必要があります。「間違ってやる」ことや、コメントで「価値を提供すること」、または変数に名前を付ける間違った方法などについての人間の発言はありません。これらの議論は価値がなく、私たちの感情的なコーディングの矢面に立つことができるサードパーティのロボットに任せるのが最善です。

この質問に実際に答えるには、次の質問に答える方法に対処する標準の作成方法に対処する必要があります。このコメントは価値を提供しましたか?コーディング標準では、コメントの「値」を指示することはできません。そのため、人間がそのチェックリストを通過することが必要になります。コーディング標準でコメントに言及するだけで、元のポスターが避けたいチェックリストが作成されます。

そのため、通常、コメントはコンパイラによって処理されず、削除されます。それらの値を決定することはできません。問題のコメントは価値があります。はい、もしくは、いいえ?。この質問に答えることはNP困難です。人間だけが適切に答えるチャンスを持ち、それでも、それを読んでいる人によって、それを読んでいるときにしか答えられません。そのコメントの価値は、天気、彼または彼女の家庭生活、彼らがちょうど出席したばかりの最後の会議、時間、彼らが持っていたコーヒーの量に影響されます。私はこの状況がより明確になっていると信じています。

どのように標準で適切に表現できるのでしょうか?標準は、一貫して公平に適用できる場合を除き、有用ではありません。公正とは、感情的ではなく客観性に関するものです。

私は、コーディング標準が可能な限り客観的であり続けるべきであることを争います。変数がIS目的と命名される方法。適切なスペル、文法構造、大文字と小文字の区別を辞書で簡単に確認できます。それを超えるものは、「おしっこ試合」であり、最も権力のある人または「眉をbeる」ことによって勝ち取られます。私は個人的に、やっていないことに苦労しています。

私がコメントするとき、私はいつも第三者に自分の将来の自分と話すことをコメントします。5年後にこのコードに戻ったら、何を知る必要がありますか?何が役立つのか、何が混乱するのか、何がコードの時代遅れになるのか?検索可能なパブリックAPIを生成するコードのドキュメント化と、未知のサードパーティに価値を提供するコメントコード(そのサードパーティが自分自身であっても)には違いがあります。

これが良いリトマス試験です。あなたがプロジェクトの唯一の人だった場合。自分がプロジェクトの唯一の人になることは知っていました。あなたのコーディング標準には何がありますか?あなたのコードは、クリーンで、自明で、将来自分で理解できるようにしたいと思うでしょう。すべての行にコメントを付けなかった理由について、自分自身でコードをレビューしますか?チェックインした100個のファイルについて作成したすべてのコメントを確認しますか?そうでない場合、なぜ他の人を強制するのですか?

これらの議論で見落とされていると思うのは、Future Youがこのプロジェクトの開発者でもあるということです。価値について尋ねるとき、明日はあなたもコメントから価値を引き出すことができる人です。私の意見では、チームの規模は問題ではありません。チームの経験は重要ではなく、頻繁に変更されます。

これをレビューするコメントコードは、ペースメーカーが患者をクラッシュさせたり殺したりするのを止めることはありません。コードに影響するコメントについて話したら、コメントではなくコードについて話しています。誰かを殺すためのコメントが欠けているだけなら、その過程で何か臭いがする。


このタイプの厳密なコーディング方法のソリューションは、ソフトウェア自体を記述するための方法論としてすでに提供されています。そして、それはコメントとは何の関係もありません。コメントの問題は、製品が最終的に機能する方法に影響がないことです。世界で最も優れたコメントは、ペースメーカーに組み込まれたときにソフトウェアがクラッシュするのを防ぐことはできません。または、ポータブルEKGで電気信号を測定する場合。

2種類のコメントがあります。

機械可読コメント

Javadoc、JSDoc、Doxygenなどのコメントスタイルは、コードセットが提供するパブリックインターフェースにコメントするすべての方法です。このインターフェイスは、他の1人の開発者(2人のチームの専有コード)、不明な数の開発者(JMSなど)、または部門全体でのみ使用できます。このコードは、自動化されたプロセスで読み取ることができます。自動化されたプロセスは、コメント、ala HTML、PDFなどのさまざまな読み取り方法を生成します。

このタイプのコメントは、標準を簡単に作成できます。これは、すべてのパブリックに呼び出し可能なメソッド、関数、クラスに必要なコメントが含まれることを保証する客観的なプロセスになります。ヘッダー、パラメーター、説明など el。これは、別のチームがコードを簡単に見つけて使用できるようにするためです。

私はクレイジーに見える何かをしているが、実際にはそうではない

これらのコメントは、このコードが特定の方法で作成された理由を他者が理解できるようにするためのものです。おそらく、コードが実行されているプロセッサに数値エラーがあり、常に切り捨てられますが、開発者は通常、切り上げられるコードを処理します。したがって、コードに触れる開発者は、現在のコンテキストが通常何をしているのかを理解するためにコメントするのが普通ですが、実際には意図的にそのように書かれています。

このタイプのコードは、非常に多くの問題を引き起こすものです。通常、コメントは解除され、後に新しい開発者によって発見され、「修正」されます。したがって、すべてを壊します。それでも、コメントは、実際に何かを壊すことを妨げない理由を説明するためのものです。

コメントは信頼できません

コメントは最終的には役に立たず、信頼できません。コメントは通常、プログラムの実行方法を変更しません。そして、もしそうなら、あなたのプロセスはより多くの問題を引き起こしているはずです。コメントは後から付け加えられたものであり、決して他のものにはなり得ません。重要なのはコードだけです。コンピューターで処理されるのはそれだけです。

これは恐らく聞こえるかもしれませんが、私は耐えます。これらの2行のうち、本当に重要なのはどれですか?

// We don't divide by 0 in order to stop crashes.

return 1 / n;

この例で重要なのは、 'n'が何であるかわからないこと、nが0であるかどうかのチェックがないこと、そしてたとえあったとしても、開発者n = 0が0のチェックを行った後に停止するものがないことです。役に立たず、これを自動化できるものはありません。これをキャッチできる標準はありません。このコメントは、(一部の人にとっては)かなり美しいものの、製品の結果には関係ありません。

テスト駆動開発

製品にどのような結果がありますか?書かれているコードが文字通り誰かを救ったり殺したりできる業界は、厳密にチェックする必要があります。これは、コードレビュー、コードレビュー、テスト、テスト、コードレビュー、単体テスト、統合テスト、トライアル、ステージング、テストの月数、コードレビュー、およびシングルパーソントライアル、ステージング、コードレビュー、テスト、そしておそらく最終的に行われます生産に入る。コメントはこれとは関係ありません。

コメントがなく、仕様があり、仕様を検証する単体テストがあり、本番デバイスでコードを実行した結果の調査があり、テストされていない、または比較するものがないコードが十分に文書化されているコードコードに対して。

ドキュメンテーションは、誰かが特定の方法で何かをした理由を理解しようとしているときに便利ですが、長年にわたって、ドキュメンテーションは通常、「賢い」何かが実際に必要ではなかった理由を説明するために使用されることがわかりましたそのように書かれています。

結論

すべての行をコメントする必要がある会社で働いている場合、プロジェクトの少なくとも2人のソフトウェアエンジニアが、行が何をしているのかの一般的なアイデアを決定するPerl、Lisp、またはPythonの自動ドキュメントプログラムを既に作成していることを保証します、その行の上にコメントを追加します。これは可能であるため、コメントは無意味です。これらのスクリプトを作成したエンジニアを見つけて、コードを自動的に文書化し、「すべての行のコメント」が時間を浪費し、価値を提供せず、潜在的に損害を与える理由の証拠として使用します。

余談ですが、私は親しい友人のプログラミングの割り当てを手伝っていました。彼の教師は、すべての行を文書化する必要があるという要件を設定していました。ですから、この思考プロセスがどこから来たのかがわかります。何をしようとしているのか自問してください、これは正しいことですか?その後、自問してください。このプロセスでシステムを「ゲーム」する方法はありますか?ある場合、それは本当に価値を追加していますか?コードが特定の仕様を満たしていることをテストする単体テストを自動的に作成することはできません。可能であれば、それは悪いことではありません。

デバイスが人間の内部にあるために特定の条件下で動作する必要がある場合、デバイスが殺されないことを保証する唯一の方法は、長年のテスト、ピアレビュー、トライアル、そしてコードの変更を二度としないことです。これが、NASAがそのような古いハードウェアとソフトウェアをまだ使用している理由です。生死に関しては、「少し変更してチェックインする」だけではありません。

コメントは命を救うこととは関係ありません。コメントは人間に対するものであり、人間はコメントを書くときでも間違いを犯します。人間を信用しないでください。エルゴ、コメントを信用しないでください。コメントはあなたの解決策ではありません。


3
コメントの問題は、製品が最終的に機能する方法に影響がないことです。まあ、コードの読み取りと書き込みの人間の部分がカウントされる場合、それが最終的にどのように機能するかに影響すると思います、最終的に書き込まれたときのコードの実行方法に影響しません。コードの問題は、単にコードが古くなって、コードがないよりも悪いということです!
マイケルデュラント

1
ここには、作業を最適化するために、私たちがやったことの毎日のレポートを望んでいたタイムキーパーがいました。いずれにせよ、彼のフォームを埋めるために毎日15分を費やす必要があるという事実に少し怒っていたので、ログからゴミを埋めることでこれを自動化しました。
joojaa

1
「クラッシュを止めるために0で除算しない」というコメントには別の問題があります。 「in to to」句が除算のアクションに適用されるか、その否定に適用されるかは、文法的に明確ではありません。「…のために0で除算することを避けます」を使用すると、このあいまいさが回避されます。:)
ワイルドカード

1
「クラッシュを止めるためにゼロで割らないでください」と書いた人の考え方について多くのことを教えてくれます。クラッシュを避けるためのコーディングはしません!コードが正しいようにコーディングし、クラッシュしないことは正しいことのほんの一部です。注入する薬の量の計算がゼロで除算される場合、99999のようなダミー値を返さない
...-immibis

1
@AndrewTFinnellゼロ除算エラーが発生することがある場合、「if(divisor == 0)return <something>; //ゼロ除算を回避する」を追加してもコードは正しくなりません。代わりに、除数がゼロである理由を見つけて修正する必要があります。一部のアルゴリズムはゼロ除数が避けられないように設計されていますが、例外です(その場合、「結果を計算できません」という値を返すことができます)。
イミビス

12

コメントについて話すとき、2つの異なることを暗示します。それらは同じではなく、区別が重要です。

ドキュメントは、コードの一部である外向きの部分、つまりそのインターフェイスについて説明しています。

通常、ツールを使用すると、それらを「スタンドアロン」形式で読み取ることができます。つまり、基礎となるコードを同時に見ているわけではありません。

すべてのインターフェイスを文書化する必要があり(プライベートメソッドを除く各メソッドなど)、入力、出力、その他の期待、制限など、特に制約やテストなどでは表現できないものを記述する必要があります(正確にどれだけ詳細にどこに行くかは、プロジェクトに依存します)。

優れたドキュメントにより、潜在的な消費者はコードを使用するかどうか、いつ、どのように使用するかを決定できます。

ソースコードのコメントには、別の目的があります。ソースコードを見ている人のためにあります。主に実装について説明します。

コメントは、基になるコードの中で常に読み込まれます。

コメントは、意外な決定や複雑なアルゴリズム、または採用されなかったオプション(および推論)を説明するものでなければなりません。それらは、将来の開発者が前任者の思考プロセスを理解できるように存在するため、見逃したり多くの時間を費やしたりするかもしれない情報を手元に持っています。

# 'map' outperforms 'for' here by a factor of 10  

// This line works around an obscure bug in IE10, see issue #12053  

-- We are going to recursively find the parents up to and including the root node.
-- We will then calculate the number of steps from leaf node to root node.
-- We first use a WITH clause to get the ID of the root node.

コメントがないことから何かを推測することはできません。もちろん、コメントは周囲のコードと同じくらい間違っているかもしれません。判断は、著者側と読者側の両方で行わなければなりません。

すべての行にコメントすることは明らかに疑わしい付加価値のある作業であり、機会費用が伴います。すべての行をコメント化する必要があるというルールがある場合、それを取得できますが、重要な部分が適切にコメント化されます

しかし、それよりも悪いことです。すべての行がコメント化されると、コメントの目的は無効になります。コメントはノイズになり、コードを読みにくくします。明確にするのではなく、わかりにくくします。さらに、無差別なコメントは、本当に重要なコメントを見つけにくくします。

コメントも文書も、それらが記述するコードの品質を測定したり保証したりするものではありません。それらは本物のQAの代替ではありません。彼らの目的は、将来を見据えることです。つまり、相互作用する人が間違いをしないように支援することを期待しています。

要約すると、コーディング標準はドキュメントを必要とする可能性があります(自動化されたチェックはドキュメント化されていない関数/メソッドを見つけるのに役立ちますが、ドキュメントが適切かどうかを確認する必要があります)。コメントは判断を促すものであり、スタイルガイドはこれを認める必要があります。決してコメントしない人、および考えずにコメントする人は、挑戦されることを期待すべきです。


パブリックAPIを文書化することは良い点ですが、驚くべき決定を説明するのは本当に好きです。少なくとも驚きの原則の違反が少なくとも正当化に伴うものであるならば、それは非常に素晴らしいことです。+1
candied_orange

1
ノイズとしての無関係なコメントの場合は+1。信号対ノイズを高く保ちます。
sq33G

すべての行がコメント化されると、特にコメントを目的とした +1 は無効になります。残念これはあるかもしれない(そしてしばしばれる)で、すべてのコメントをしない言い訳として使用し、それはあなたが言及した理由のために、とにかく非常に右であるプラスのすべての行をコメント化されているのであれば、ほとんどの人は、自動的かつ当然無視して起動しますすべてのコメントを。
-SantiBailors

10

重要なコメントが何であるかを事前に知ることができないため、コメント標準を体系化することはできません。

ただし、これは非常に重要なコードなので、コードが正しくコメント化されていることを確認する必要があります。解決策は、コードレビューの標準を用意することです。コードレビューには、理解可能性に関するコメントを要求する必要があります。

これは、意味のないチェックリストにならないことを保証するものではありませんが、少なくともコードが読みにくくなるのを防ぎます。そして、それを改善する可能性があります。

これには、コードレビュー自体が無意味なジェスチャーではなく、読みにくいコードを送り返すことが良いことであり、in辱や迷惑行為ではない文化が必要です。同様に重要なことは、それが不明確であると言っているものは、読者の失敗とは見なされません。

判読不能なコードは、ある程度は避けられません。ライターはコンテキストに没頭しているので、x、y、またはzを知っている場合にのみ明らかであるときに、何かが明白であると見なされます。

そのため、良いフィードバックを与えるというルールを持つことはできませんが、レビューを確認することはできます。プログラマでないマネージャーでもそうすることができます-実際の質問は、読み取り可能に書かれたコードではなく、実際に読み取り可能なコードであり、それを読んだ人だけが決定できるからです。


7
コメントの標準を成文化することはできません -もちろんできます。あなたはコードレビューの対象となるコメントを作成し、コメントがコードを説明していないというコードレビュー項目に対処する必要があります。これは費用であり、ほとんどのプログラミング環境では支払いたくない費用です。重要なソフトウェアに関しては見返りがあります。
デビッドハンメン

「... x、y、またはzを知っている場合にのみ明らかな場合」何かを明白であると見なすために事前に知る必要がある知識の量{x、y、z}を指定できます(種類機械的に)あなたはこれが現在のコードに当てはまるかどうかを確認できます。そうでない場合は、コメントが追加されます。
トライラリオン

1
@DavidHammen:それはコメントの標準ではなく、レビューの標準です。これが私が解決策として提案し続けたものです。特定のサイズである必要があると言うことも、特定の構文を使用することも、最初からコメントを必要とすることもできません(または「iに1つ追加」タイプのコメントを取得します)。レビューアはコードとコメントについてコメントする必要があると言うことができます。あなたが言うように、コードレビューによって提起された問題に対処することを要求できます。しかし、このための責任は、良い仕事をするためにレビュアーにあることです。コードとコメントが十分かどうかを判断できるのは、レビュー担当者のみです。
jmoreno

@DavidHammenレビューのために選ばれた人々は、判断を呼びますか?そして彼らが去るとき?新しい人が同じように考えたり、英語を話せない場合は?「レビュアー」が去ったら?あなたの提案は、アイボリータワーの上に数人の開発者を置き、反対、不信、コミュニケーションの崩壊につながります。コメントは、コメントを使用できる人に洞察や説明を提供するためのものです。おそらくジョーはそれを必要としますが、メアリーはそれを必要としません。メアリーがレビュアーの場合はどうなりますか?それともジョー?またはマーク?
アンドリューTフィネル

@jmoreno-コメントに関するルール/ガイドラインをコーディング標準に配置しないことは、プログラマーが複数のソースを調べる必要があることを意味します-そして、コメントが標準以下であるとレビューが戻ってくるまで、彼らはどこを見るべきかわかりません。コーディング標準のすべてが自動化可能でなければならないと考えるのは間違いです。たとえば、意味のある名前に関するルールは自動化できません。少なくともまだ。たとえば、xy、およびz、またはijし、k1はその式に正確にそれらの名前を使用ジャーナル紙に基づいた科学的なアルゴリズムを実装している場合、非常に意味のある名前することができます。
デビッドハメン

9

コードのすべての行をコメントしますか?いいえ

あなたが話す他のルールの目的は、まさにそれを避けることです。

読み取り可能なコードへのコメントはせいぜい冗長であり、最悪の場合、コメントの存在しない目的を探している読者を捨てます。

自明のコード全体をコメントする場合、追加情報を提供せずに読み取り量を2倍にします。そのような冗長性が報われるかどうかはわかりません。display_errorコメントが「警告を表示する」と言っている間に、42が「」と言っているレビューアーを想像することができます。しかし、コードの変更を想像してください。今すぐ修正する場所が2つあります。このスタイルにはネガがコピー&ペーストされていることが明らかになります。

最適なのは、コードがドキュメント以外のコメントを必要としないことです。

まったく反対のスタイルがありますが、ラインに疑問がある場合は次のいずれかです:

  1. コードは複雑すぎるため、コードの一部に意味的な意味を持つ名前を持つ関数にリファクタリングする必要があります。複雑なものifでも、アルゴリズムの一部でもあります。(または賢いLINQワンライナー)

  2. 単純化できない場合は、言語の十分なイディオムがわかりません。

(私は個人的に厳密なコメントなしのルールの狂信者ではありませんが、私はそれが行くべき良い初期の考え方としてそれを見つけます。)

このすべてを考えると、このアイデアをキャプチャする良いコーディング標準を書くことさえ可能ですか?

プロセスに関しては。私たちの基準は、レビュアーにかなりの信用を与えました。それらが悪意のないものであると仮定すると、これはうまく機能します。

「変数とは何oですか?」と尋ねたら、名前を変更します。彼がこのブロックが何をするかを尋ねる場合、リファクタリングまたはコメントします。何かが明確であるかどうかについて議論があった場合、レビュアーがそれを受け取らなかった場合、定義によりそうではありません。ごくまれに、少数の友人からのセカンドオピニオンのようなものがありました。

平均して、チームの平均的なプログラマーが理解できるコードを取得する必要があります。IMOは冗長な情報を排除し、チームの少なくとも1人の他のメンバーがコードを理解できるようにします。

また、絶対的なものはありませんでした。私たちは小さなグループでしたが。5人のグループでコンセンサスを見つけるのは簡単です。


2
コードレビューを使用して、どの変数、クラス、およびメソッドに名前を付けるかを決定することが、人々が会社、ビジネス、または方法論を嫌うようにする最良の方法です。コードレビューは、実際に重要でないことを実施する方法として使用しないでください。コーディング標準は、自動化プロセスを介して確認可能でなければなりません。変数名の長さ、循環複雑度、デメテルの法則は、すべて確認できるものです。変数の名前を 'i'からindexForThePreviousCollectionのような名前に変更するように誰かに言われたら、別の場所を見つけるでしょう。変数> 3文字は、チェックイン前にすべて自動的にチェックされます。
アンドリューTフィネル

3
@AndrewTFinnell名前を付けたいと思うプログラミングパラダイムでは、コードに従うことは不可能です。
candied_orange

2
@AndrewTFinnellまあ、私は丁寧に反対します。「コードレビューを使用して口述する」、それをどこから引き出したのかわかりません。元の作者が辞めた後は、変数、、、、、、、、、、、、、iなどと一緒にコードを操作したくありません。「ヒト」ゲノムに関するあなたの主張は理解できません。私は、単一のステートメントである言語、または2つが理解するのが難しすぎる言語があることを疑います。私が言ったように、私は複雑なsとワンライナーを見てきました。意味的に意味のある名前でコメントを付けたり、リファクタリングすることができます。それがあなたの「良いコメント」だと思います。jkifLINQ
luk32

3
@ luk32私は反対する権利を尊重します。私の意見では、反復変数は文脈上明らかです。私はあなたの声明の感情を理解していますが、その感情を極端にとる実践が多すぎると思います。:私たちは本当に読み取るコード必要ですfor (int indexForCurrentDatabaseRow = 0; indexForCurrentDatabaseRow < currentUserRecordSetResults.length; indexForCurrentDatabaseRow = indexForCurrentDatabaseRow + 1)対をfor (int i = 0; i < results.length; i++)?おそらく、それは好みの問題やコードを見るのに時間を費やしているのでしょう。過度に冗長な名前は私に臭いがします。
アンドリューTフィネル

2
コードレビューで名前を決めるべきではないと思います。通常、コードのレビューは、作成者が十分だと判断した後に開始する必要があります。これは、適切にコメントが付けられ、理解しやすく、変数に適切な名前があることも意味します。問題は、レビュアーがコードが複雑すぎるか、変数の意味と格闘していると思う場合、コードを理解するのが難しいことです。これは議論の余地はありません-少なくとも1人の開発者-査読者-はそれを理解していませんでした。リファクタリングする必要があるかどうか(およびその方法)または適切にコメントすることは別の問題です。
イダンArye

9

質問:

このすべてを考えると、このアイデアをキャプチャする良いコーディング標準を書くことさえ可能ですか?ピアレビューに関連するが、「42行目にコメントするのを忘れた」よりも有益なメモを生成する、無頓着なチェックリストアクティビティにならないもの。

コメントは、言語について読者を教育しようとするべきではありません。読者は、作家よりも言語をよく知っているが、作家よりもはるかに少ない文脈で知っていると想定されるべきです。

あなたの例から、このコードの読者は、それexit()がアプリケーションを終了することを知っている必要があります-したがって、コメントを冗長にします:

/* Exit the application */
exit();

冗長コメントはDRYに違反している、のコードへの変更は、必ずしもそのコードが、実際にやっていることを反映していないコメントを残して、コメントには反映されません。

ただし、何かをしている理由を説明するコメントは、特にコード自体の意味を簡単に伝えることができない場合に価値があります。

PythonのPEP 8(CPython標準ライブラリのPythonのスタイルガイド)は、インラインコメント用に次のガイドラインを提供します。

インラインコメントは控えめに使用してください。

インラインコメントは、ステートメントと同じ行のコメントです。インラインコメントは、ステートメントから少なくとも2つのスペースで区切る必要があります。#と1つのスペースで始まる必要があります。

インラインコメントは不要であり、実際に明らかなことを述べている場合、実際には注意をそらします。これをしないでください:

x = x + 1                 # Increment x

しかし、時々、これは便利です:

x = x + 1                 # Compensate for border

そのような例を考えると、私は個人的にさらに一歩進んで、このコメントも削除しようとすることを好みます。たとえば、私は次のように到着します。

border_compensation = 1
compensated_x = x + border_compensation

コードを自己文書化することは新しいアイデアではありません

実際の質問に戻る:

このすべてを考えると、このアイデアをキャプチャする良いコーディング標準を書くことさえ可能ですか?

PEP 8のガイダンスと例は、このアイデアを取り入れた優れたコーディング標準を示していると思います。はい、可能です。


1
「読者は作家よりも言語をよく理解していると想定されるべきです」私はそれが正しい態度だと信じるのに苦労しています。彼らは同じくらい知っている思いますが、すべてのチームは異なり、チームのすべての人は異なるので、この特定の点に関する包括的な声明は賢明ではないようです。
ブライアンオークリー

4
このガイダンスがなければ、簡単なコードを説明するコメントを自分だけで行うジュニアプログラマーや、コードをジュニアプログラマーがアクセスしやすくするために厄介なソリューションを使用する中間レベルのプログラマーがいることになります。このガイダンスは冗長性を排除し、熟練したプログラマーでさえもコードの改善を続けます。自分でコードを再訪したとき、コンテキストを忘れたかもしれませんが、一般的に、私は最初に書いていたときよりも言語が何をしているのかをよく知っています。
アーロンホール

4

あなたがこの種のコメントを見たとき、私は時々このように書いていると思います。それは著者がコメントに仕様を書き、それから各コメントを実行して実装しているからです。

実際の機能ではなく、必要な機能の点で理解可能なコードを生成するコーディング標準の作成に挑戦する場合(エラーを見つけることができるように)、仕様の定義、文書化、リンクの方法について本当に話しているのですか?最終製品?

編集----

明確にするためだけに。コメントvs tdd vs単体テストのどちらがベストかはわかりません。または、行ごとにコメントを提案することは良い/悪いです

この例で説明されているコメントのスタイルを見る理由を提案しているだけです。

そして、コメントについてのコーディング標準が実際には何らかの仕様書の要​​件としてより良く書かれているかどうかという質問から。

つまり、コメントはコードの目的を説明するためのものであり、これも仕様です


6
20年の間、このようにコードのプロトタイプを作成し、実際のコードでギャップを埋める人がいるのを見たことはありません。あなたが言っていること、または私があなたが言っていることを達成するための客観的な方法はすでにあります。テスト駆動開発と呼ばれます。単体テストは、仕様と、コードがその仕様に準拠しているかどうかを定義します。コメントなし。
アンドリューTフィネル

9
私は質問のコードがこの良い例だとは思わないが、最初にコメントで手順を書き、それから戻ってコードを記入する方法は、具体的には「コード完了」で呼び出される@AndrewTFinnellの読み取り可能なコードの作成を支援するための可能な実践。それはあなたの経験の範囲外であっても、間違いなく前代未聞ではありません。
ジョシュキャズウェル

6
tddよりも前に私は信じています
ユアン

2
擬似コードプログラミングプロセスについて話していますか?その目的は、コメントを減らすことでした。コメントを記述した本がコードに残されるべきであることを私は決して覚えていません。また、概念的な手順を作成するためのコメントは、低レベルではなく高レベルであることを意味します。書くつもりだったすべての行をコメントする場合、それらの行を書いただけかもしれません。アイデアは、各行ではなくコードのプリンシパルをプロトタイプ化することです。本は、すべての行にコメントすることを提案していません。それがこの質問の焦点です。そして、私は間違っているかもしれませんが、それは第2版にあると信じています。
アンドリューTフィネル

2
@JoshCaswell&Ewan、はい、それ何年も前のテクニックであり、実際にTDDよりも前のものでした。しかし、あなたは後でコメントを削除するつもりでした!また、TDDは、仕様に適合するコードを作成する賢明な方法として完全に取って代わりました。
デビッドアルノ

4

このすべてを考えると、このアイデアをキャプチャする良いコーディング標準を書くことさえ可能ですか?ピアレビューに関連するが、「42行目にコメントするのを忘れた」よりも有益なメモを生成する、無頓着なチェックリストアクティビティにならないもの。

これは明らかにドキュメントの範囲を超えています。これは、コードの構造、アルゴリズムの選択などに影響を与えます。要件の分析や設計にも影響を与えます。

私の一番のルールは「明白なことを文書化しないこと」です。#2ルールは「明白なコードを書く」です。

安全に重要なコード(私はこれまで取り組んだことがありませんでした、神に感謝します)の場合、これは必要ですが、十分な最初のステップにはほど遠いです。避けなければならない言語機能を強制する必要があるかもしれません(「scanf( "%s", input ); なんらかの理由で使用していけません」という標準的な指示が複数あります)。


明らかなのは見る人の目です。締め切り次第で変わります。
トニー・エニス

3

自己文書化コードのベストプラクティスは主流のコンセンサスではありません-わかりやすいコードが不可解なコードよりも優れていることは広く受け入れられていますが、複雑なコードを常にリファクタリングする必要があるかどうか、コメントしてもよいかどうか全員が同意しているわけではありませんそれ。

しかし、この議論は理解するのが難しいコードの断片についてであり、あなたはコードのすべての行をコメントすることについて話している。理解するのが難しいコード行は非常にまれです。ほとんどの行がこのように複雑な場合は、スマートワンライナーを使いすぎて停止する必要があります。確かに、ラインの役割を理解するのは少し難しいかもしれませんが、それはより大きなコードのコンテキストでの役割です-ライン自体が行うことはほとんど常に簡単です。

したがって、行にコメントを付けないでください。コードの一部にコメントを付ける必要があります。特定のコメントは、参照する行の近くに配置される場合がありますが、これらのコメントはまだ大きなコードを参照しています。彼らはその行が何をするのか/何をするのかを記述しません-そのコードで何をするのか、そして/またはそのコードでそれがなぜ必要なのかを記述します。

したがって、コメントする必要があるのは行ではなく、より大きなコードです。すべてのコードにコメントを付ける必要がありますか?いいえ。ハロルド・アベルソンは、「プログラムは、人々が読むために、そして偶然にマシンが実行するためだけに書かれなければならない」と言った。しかし、コメントは人々が読むためだけのものです-マシンはそれらを実行しません。コーディング基準がすべての行/コードに冗長なコメントを書くことを強制する場合、それらを書く必要がある開発者に負担をかけるだけでなく、あなたはそれらを読む必要がある開発者にも負担をかけます!

これは問題です。読んだコメントのほとんどが冗長な場合、それらに注意を払うのをやめるので(冗長なジャンクになるだけなので)、重要なコメントを逃してしまいます。だから私は言います-重要なコメントだけを書いて、誰かがコードにコメントを見つけたときに、コードを理解するためにそれを読む価値があることを知ってください。


1
重要なコメントを見逃します:+1。「彼らは説明しません」で始まる文は、わかりやすくするためにいくつかの再構築を使用できます。
-candied_orange

3

私見それは両方を行う必要があります。すべての行をコメントするのはばかげています。

  i++;    /* Increment i */

なぜiを増やしたいのかについての手がかりはまったくありません。これを少し拡張すると、典型的なDoxygenスタイルのコメントができます。これは、コードの目的や動作をまったく理解せずに大量の冗長な表現を生成します。(少なくとも私が見た限りでは、そのようなシステムを使用して有用な文書を書くことができるかもしれないと認めていますが、息を止めていません。)

OTOH、関数の先頭に適切なコメントブロック(または論理的なグループ化)を記述し、達成すべきことと、それが明白でない場合に有用なものを作成する方法の両方を説明する場合。私なら、関連する方程式のLaTeXコード、または論文への参照を含めることもできます。たとえば、「これは、ハミルトン-ヤコビ方程式を解くためのWENOスキームを実装します。...」


2
doxygenコメントの+1:これは、私のコードにdoxygenの「ドキュメント」を含めることにまったく反対です。95%の時間は、関数のシグネチャから既に明らかなことを繰り返すだけです。私も、まだ価値のある単一のdoxygenドキュメントを見ていません。それらのコメントを書くと、時間を3回無駄にします。1回はコメントを書き、1回はコメントを再度読み、1回は古いコメントコンテンツによって作成された問題をデバッグします。
cmaster

1
あなたは自分自身に矛盾していませんか?関数にはブラックボックスの観点から何を行うかを説明するコメントを付けることが重要であると私たちは同意すると思います。関数を作成した人と関数を使用する人との間の契約を形成します。Doxygenの目的は、解析して検索可能/インデックス化できるように、これらのコメントの形式を単純に標準化することです。なぜあなたは「良いコメントブロックを」欲しいだろうがない、標準、人間と機械可読な形式でそれをしたいですか?
グラハム

@Grahamが言ったように、JSDoc、JavaDoc、Doxygenなどのコメント標準の使用は、検索可能で人間が読めるドキュメントを提供するためのものです。この回答で言及されているコード行は、Doxygenとは何の関係もありません。そのコメントを解析し、出力されたドキュメントにエントリを作成するルールセットが存在することさえ想像できません。JMIのドキュメント、Java標準ライブラリなどを見ると、これらはすべてDoxygenに非常によく似たツールを使用して作成されています。それが目的です。ここで言うことではありません
アンドリューTフィンネル

私はこれを作成していません-カナダの要件を満たすために、私が働いていた会社は、OPの例のようにコメントを追加するプリプロセッサを開発者に書いてもらいました。私たちのものは「C ADD 1 TO I」またはそのようなものだったと思います。FORTRANであったため、ループは同様に「C LOOP FROM 1 TO 10」と称賛されました。コードは無意味なコメントでロードされました。コードを保守しているので、私はそのくだらないものをすべて削除しました。誰も私に何も言わなかった。
トニー・エニス

2

フローチャートを取り戻す時が来ました!(実際にはありませんが、しばらくお待ちください)

先日、古いフローチャートテンプレートを見つけました。私は宿題やジョークにしか使用していません(おもしろい愚かなフローチャートが大好きです)。しかし、この時点でも、まだフローチャートを使用しているほとんどの商用プログラマーは、コードから自動的にそれらを生成していました(これは、フローチャートの本来の目的を完全に損なうものでした。しかし、より高いレベルの言語では、フローチャートは松葉杖からホーブルに変更されましたなぜですか?フローチャートの抽象化はコードと同じでした。優れたコメントは、コードとは異なる抽象化レベルにあります。これを行う最も簡単な方法は、コードが何を処理するのかという理由にコメントを使用することです。


フローチャートが消えることがないことをお知らせします。
Ant P

良いコメントは、コードとは異なる抽象化レベルです。聞いて聞いて!
candied_orange

1
これはきちんとしたアドバイスかもしれませんが、たぶん一文を除いて、尋ねられた質問に対処しているようには見えません。
ブライアンオークリー

0

前述の質問に答えます。

このすべてを考えると、このアイデアをキャプチャする良いコーディング標準を書くことさえ可能ですか?

はい。WYSIWYG。優れたコーディング標準は、文字通り「次のコードが何をするのか、そしてその理由は読者には明らかです」です。

つまり、コードの読みやすさに関するコードレビューコメントは、文字通り1-1です。私の精神状態から生じます。

私は、読者として(より良い、最低限の標準として、経験の浅いが合理的な読者の精神モデル)、次のコードの目的や作業方法を理解しません

一般的に、「これは読みやすさが必要です」と聞くと、人々は簡単に乗ることができます。そのため、説明する必要があります」。

これにより、「意味のない標準に従わなかった」ことから「実際の問題につながる特定の読みやすさの欠如がコードにある」ことに言説が移ります。

明示する必要がある2番目の標準は、「午前2時の緊急テスト」です。

このコードを経験していないバックアップは、携帯電話のないチリのアンデスで休暇中の午前2時の本番緊急ブリッジコール中にデバッグするときに、コードの問題を把握できますか?

これは主観的に聞こえるかもしれませんが、実際に測定するのは簡単です。実稼働中の緊急時に夜間デバッグすることが予想されるランダムなジュニアチームメンバーを呼び出し、コメントなしのコードがどのように機能するのか、なぜそれが理由なのかを説明するように依頼しますそこ。


0

この回答はほとんどの問題をカバーしましたが、重要なことが1つあります。

コードの各行、シーケンス、ステートメント、セクション、構造、関数、メソッド、クラス、パッケージ、コンポーネントなどのコメントを検討します。

doxygenなどのコードからドキュメントを生成するツールがあります。そのようなツールを使用する場合、ファイル、関数、クラスなどをコメントするのが理にかなっています。関数の名前が自明であっても、ドキュメントを読んでいる人は感謝するので、一貫性のためにそれをしています。


1
しかし、このようなツールによって生成される「ドキュメント」は、少なくとも私の経験では、ユーザーに有用な情報を提供しないため(そして、非存在する情報)、しかし開発者は自分のコードを適切に文書化されていると思わせます。
jamesqf

@jamesqfはい、機能の半分が文書化されておらず、残りの半分がひどく文書化されていない場合。しかし、doxygenには、適切にその関数、クラスなどをコメントし、開発者を想定し、かなり良いドキュメントを生成することができます
BЈовић

-1

既存の回答の多くは詳細に説明されていますが、回答することが重要だと感じました。

... [コメント]ピアレビューに関連するが、気の抜けたチェックリストアクティビティにならない...

私にとって標準になりうる唯一のコメントは、それらが欠けているときにどのようなコメントに気付くか尋ねることで答えることができます。つまり、IDEまたはドキュメントソフトウェアで使用されるコメント。

はいえ、これは開発者がどのツールを使用するかを左右するものであり、そのようなソフトウェアで使用されるすべてのコメントが互いに有用であるとは限りません

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