プログラミングの過程を通じて、コードを説明するコメントと、コードを削除するコメントがいくつかあります。
// A concise description
const a = Boolean(obj);
//b = false;
どちらをすばやく解析する良い方法はありますか?
私は3使って周りにプレイした/
のをと/** */
説明コメントのために。
また、VSCodeプラグインを使用して強調表示し//TODO:
、//FIXME:
プログラミングの過程を通じて、コードを説明するコメントと、コードを削除するコメントがいくつかあります。
// A concise description
const a = Boolean(obj);
//b = false;
どちらをすばやく解析する良い方法はありますか?
私は3使って周りにプレイした/
のをと/** */
説明コメントのために。
また、VSCodeプラグインを使用して強調表示し//TODO:
、//FIXME:
回答:
これには非常に簡単な解決策があります。コメントアウトされたコードを削除します。
本当に、コードをコメントアウトするのには2つの正当な理由しかありません。何かをテストする/修正するか、後で使用するコードを保存するかです。テストまたは修正を行っている場合は、テストまたは修正が完了したらすぐにコメントアウトされたコードを削除してください。後で使用する可能性のあるコードを保存する場合は、そのコードをファーストクラスのコードにして、ライブラリなどの使いやすい場所に置きます。
追加RobertHarveyの優れた答え@の場合:私は私が今まで一時的であっても、ソース管理にコメントしたコードを保存するために遭遇した唯一の正当な理由があると考えているか、何らかの理由で、今使用することはできませんべきではない非自明の置換コードが。それでも、コメントのほとんどは説明であり、置換コードではありません。これは、バグまたは言語の機能であり、まだ安定していないと考えられます。次のようになります。
# TODO: Replace with `foo = frobnicate(bar)` once <link.to/bug> is fixed
foo = [some complex workaround]
この場合、作業はすでに完了していますが、まだ利用することはできないため、削除すると、誰かが後で再発見する必要があります。同じことが、一見優れていると思われる次善のソリューションや、同様のソリューションに対する意識的なトレードオフにも当てはまります。
注意:コードに代替ソリューションを散らかさないでください。すべてのタスクは無限にさまざまな方法で実行できますが、すべての変更に対してこのスペースを長時間探索することは費用効率が高くありません。コードレビューは、同僚がすでに最適ではないことがわかっている改善を提案するときに、そのような欠落しているコメントを発見するのに適した場所です。
frobnicate(bar)
ため、誰も一緒に来て「不正な」コードを「修正」しようとしないことです。ですから、完璧な世界ではfrobnicate
機能が進むべき道であることを知っていることを彼らに示しますが、痛みを伴う経験から、それは正しく機能しないことを知っています。サードパーティがそれをバグと見なすことはまったく予想できず、修正する価値はありません。自明なアプローチを取らなかった理由について、将来のプログラマー(自分を含む)にコメントを残す必要があります。
うーん、私はこの質問を、コメントアウトされたコードは削除すべきだと正しく主張しているロバートとは少し違って読んだ。
ただし、後で削除するためにコードをマークする規則を探している場合、私のお気に入りは次のとおりです。
//b = false; //TODO: remove
一部のIDEのフラグ//TODO:
コメントまたは教えられることができます。そうでない場合、通常は検索可能な文字列です。これはいくつかの方法で行うことができるので、あなたの店が確立したどんな慣習に従うことをお勧めします。すべてのコードベースはこれを一方向で行う必要があります。検索可能にします。
どっちがどっち?
そのマークがなければ、これを行う自動化された方法はコンパイラーによるものです。コメントを取り除くとコンパイルされるコードが生成される場合、コメント付きのコードである必要があります。それをチェックするIDEプラグインを書くことは難しくありません。しかし、バグのあるコメント付きのコードが残されます。
これが、コメントアウトしたコードをコメントアウトしたコードを単にコードとしてマークする方が良い理由です。これにより、本当に破壊したいかどうかを決定しながら、非破壊的に作業できます。私たち全員が中断され、いくらか忘れっぽいので、その状態でいくつかの行がチェックインされても驚かないでください。そうした場合、少なくとも明確にマークされ、検索可能であると便利です。キーボードマクロは過去にこれを助けてくれました。あなたが単一のキーストロークでそれをすることができるならば、これの途中で中断されるのは難しいです。
これは、継続的な統合テストでマークを付けるまで受け継ぐことができます。おっと、未処理のTODOを再度チェックインしようとしています。
double buffer (flip on)
-> Cプロトタイプまたは超簡潔な英語?コンテキストなしでは判断できず、どちらの言語でも正しい全体構成ではありません。コメントの性質上、コンテンツの形式がどちらの方向にも制約されない場合、いくつかの偽陽性と陰性は避けられません。
プリプロセッサディレクティブを使用して、コメントではなくコードを削除します。
//comment
active_code();
#if FALSE
inactive_code();
#endif
これにより、検索が非常に簡単になり、私の構文ハイライターはそれをコメントとして扱います。それを1行にまとめることもできます。#if FALSE(...)
このアイデアを拡張して、いくつかのオプションを使用できます。
#if OPTION == 0
code_for_option_0();
#elif OPTION == 1
code_for_option_1();
#else
code_for_all_other_options();
#endif
コンパイル時のエラーチェック:
#if FOO >= 5
#error FOO should be less than 5!
#endif
もちろん、これについては行き過ぎたくない、または実際にコンパイルされているものとされていないものを区別するのが難しくなります。しかし、あなたはそのアイデアを手に入れ、それはとにかくコメントされたコードと同じ問題です...静的にのみそれを使用する限り。条件が動的な場合、それはさらに悪いことです。
この問題をまったく考慮していない既存のコードベースのどれを決定するために、私は普遍的な解決策があるとは思わない。自分でパターンを見つけて、おそらく正規表現をコーディングしてパターンを見つける必要があります。
javascript
。問題はについてです。前処理を行うこともできますが、ビルドシステムの機能が拡張され、非標準にもなります。ビルドシステムがない場合、またはビルドシステムがコードの解析と実行をまったくサポートしていない場合、このソリューションを実装することはできません。最後に、それは質問に対処することすらしていません-コメントアウトされたコードは、条件付きでアクティブ化されるコードと厳密に同等ではありません。有効にすることを意図していない残り物である可能性があります。
古いコードは可能な限りコメントアウトするのではなく、削除する必要があるという答えに同意しますが、コメントアウトされたコードが必要ないくつかの機会に慣習を守っています。
(私の基本はC#ですが、これは任意のC構文言語(javaなど)に適用できます)
// An explanatory comment has a space between the comment marker and the content.
// The following lines are commented out code so do not have the space (except where indented).
//var a = something();
//if(a==2) {
// doSomethingElse();
//}
//
、最初の列にが追加され、事実上すべてのコードがインデントされるため、コメントは事実上常にいくつかのタブで始まります。近くに先行スペースがある他のコメントが既にない限り、通常のコメントは先行スペースを取得しません。したがって、あなたのメソッドは私が作成したコメントに対してひどく失敗し、私のコメントパターンを認識するように設計されたメソッドはあなたに対してひどく失敗します。
バックグラウンドで実行されているコンパイラ(XcodeやClangなど)でエディターを使用する場合、コメントのテキストをコンパイルするだけで済みます。たとえば、「簡潔な説明」ではエラーが発生しますが、「b = false;」ではエラーは発生しません。その後、異なる構文強調表示を使用できます。
より単純な方法は、キーワードがコメントを指している、複数の単語を中括弧で囲んだコードをマッチさせているなど、行にある複数の単語など、いくつかのヒューリスティックを使用するIDEプラグインです。
少なくとも、私にとっては-C / C ++ではシンプルです。/ * * /で囲まれたコメントは参考情報です。一時的に削除されたテストコードは、先頭の//でコメントアウトされます。
そして、少なくとも私がしているような作業では、テストコードをファイルに残したままコメントアウトする正当な理由があります。遅かれ早かれ、誰かが変更を必要とし、そのコードが必要になります。ブロックのコメントを外すには、エディターコマンドが1つ必要です。また、完了したらコメントを外します。
#ifdef __DEBUG ... #endif
、使用するカスタム定義もあります。 __DEBUG
ただし、プロジェクトの構成を変更するだけで取得できる場合が多いためです。しかし、ほとんどのIDEでは独自の構成も定義できるため、その場で何でも提供できます。
printf
/ cout
または同様のものを使用しても(過去に自分でやったことは認めますが)、そこに置いておくのはあまり効果的ではありません。誰かが変更をしたいと、彼らはに関する情報を必要とするどの変数を知っているならば、それは書くために迅速かつ簡単だprintf
というDEVがあれば一方で、新たにSはしないすべてのものを必要なものを知っているだけ非コメントprintf
内のテキストの文を、その後巨大なスワス端末もおそらくそれらを助けません。
///
また/** ... */
コメントは、DoxygenやJSDocなどのドキュメントジェネレーターでも使用されます。それらまたは同様のツールを使用する場合、ドキュメントの一部となることを意図していない説明的なコメントに対して、その種のコメントを使用できない場合があります。