コードを無効にするための構文は、通常のコメントの構文と異なる必要がありますか?


8

開発中のいくつかの理由で、コードをコメントアウトすることがあります。私は無秩序で時々急いでいるので、これらのいくつかはそれをソース管理にします。

また、コメントを使用してコードのブロックを明確にします。

例えば:

MyClass MyFunction()
{
    (...)
    // return null; // TODO: dummy for now
    return obj;
}

これは「機能」し、多くの人がこのように実行しますが、コメント化されたコードとコードを明確にする「実際の」コメントを自動的に区別できないのは不愉快です。

  • コードを読み取ろうとするとノイズが発生します
  • たとえば、ソース管理のon-commitフックのコメントアウトされたコードを検索することはできません。

一部の言語は、複数の単一行コメントスタイルをサポートする-例えばPHPにすることができますいずれかを使用//または#単一行コメントのために-と開発者がコメントアウトコードのためにこれらのいずれかを使用に同意することができます:

# return null; // TODO: dummy for now
return obj;

他の言語-私が今日使用しているC#など-は、単一行のコメントに対して1つのスタイルを持っています(そうですか?コンパイラディレクティブを使用した「コメントアウト」コードの例も見ました。これはコードの大きなブロックに最適ですが、ディレクティブには2つの新しい行が必要であるため、1行では少しやりすぎです。

#if compile_commented_out
    return null; // TODO: dummy for now
#endif
return obj;

したがって、コメントアウトコードはすべての(?)言語で発生するので、「無効化されたコード」は言語仕様で独自の構文を取得すべきではありませんか?プロの(コメントの分離/無効化されたコード、エディター/ソースコントロールがそれらに作用する)は十分であり、短所(「コメントアウトはすべきではない」)であり、言語の機能的な部分ではなく、潜在的なIDEラグ(Thomasに感謝) ))犠牲に値する?

編集する

私が使用した例はばかげています。ダミーコードは実際のコードに置き換えられるため、簡単に削除できます。


私はこれで何も問題はないと思います-コードの小さなブロックをコメントアウトおよびコメントアウトすることは、大きなレガシーコードベースの非常に特定のバグをデバッグするための有用な戦術です。これは問題を絞り込むのに役立ちます(もちろん、適切なデバッガを使用することに加えて)。特別なタイプのコメント/# ... #/が表示されても問題ありません。おそらくそれはIDEで異なって強調表示され(視覚的な合図の場合)、コンパイラの警告を生成し、誰かそのような変更をチェックし直すと、毎晩のビルドによってトラップおよびレポートされます。ソース管理に。
FrustratedWithFormsDesigner

回答:


18

まず、あなたの例では「TODO」コメントがあります。これらのタイプのコメントは、IDE(少なくともEclipseおよびVisual Studio)によって「タスク」のマーカーとして検出されるため、ある意味で特別です。しかし、私はあなたがthmeを使用しているので、「無効化されたコード」という用語を使用するときには、それらを参照していないと思います。

無効化されたコード自体については、コードを汚染するというのが私の意見です。私は以前にあったものを追跡するために別のメカニズムを使用しますソースリポジトリです。code / test / code / test ...モードのときを除いて、未使用のコードにはコメントせず、削除します。その場合、X行にコメントを付けることは、1つのキーボードショートカットの問題です。

編集:そうそう、私はあなたの明確な質問に答えるのを忘れていました、無効化されたコードに対して特別なコメントをすることは役に立たないと思います。本当にコードを保持したいが、「使用しない」と言う場合は、いつでも@deprecatedとしてマークできますが、それはあなたの質問のポイントではありませんでした。


以前はダーティーなコードを書いていて、「ハック」とクイックフィックスの使用を誇りに思っていました。最近では、構造に感謝しています。おそらくこれにも慣れることができます。
Deltreme 2011

2
TLDR; ソース管理を使用します。
Chris

1
@deltremeプロの環境でソースリポジトリを本格的に使い始める前に、私が同じことを行っていたことを認めます(どのようにしてコードを「改善」したかを示します!)。それ以来、毎日読まなければならない最少のコード​​行を読まなければならないことに感謝しています。
Jalayn、2011

コミットする前に、ソース管理使用して差分熟読してください。
UncleZeiv 2011

1
残念ながら、回答の焦点は、無効化されたコードをコミットしない方法にあり、「コメントアウト」という用語が実際にどれほど愚かであるかではありません。もっと混ざると思った。私が意見を求めていたときにこの回答を受け入れると、コミュニティがあなたをバックアップしてくれます:P
deltreme '22

5

開発中のいくつかの理由で、コードをコメントアウトすることがあります。私は無秩序で時々急いでいるので、これらのいくつかはそれをソース管理にします。

これが問題の根源だと思います。無秩序で急いでいると、問題が生じるだけです。開発が急いでいてうまく制御されていない理由を理解することが、コメントアウトされたコードを見つけようとせずに、最初のステップであるべきです。

したがって、コメントアウトコードはすべての(?)言語で発生するので、「無効化されたコード」は言語仕様で独自の構文を取得すべきではありませんか?プロの(コメントの分離/無効化されたコード、エディター/ソースコントロールがそれらに作用する)は十分であり、短所(言語の機能的な部分ではなく、「とにかくコメントアウトしないでください」)は犠牲に値しますか?

私はそうは思いません。コメントアウトされたコードは悪い習慣であり、言語が誰かにそれを使用することを奨励すべきではないと私は思います。はい、人々はそれを行い、私はそれを見ましたが、コメントアウトされている私のコードをチェックインすることを拒否します。未使用の古いコードを簡単に管理できるようにすることは、言語の範囲を超えており、バージョン管理の領域に属するものです。

技術的な制限も気になります。これが機能するためには、コメントを解析して、コメントアウトされたソースまたはテキストであるかどうかを判別するか、新しいトークンを言語に追加する必要があります。言語の現在の複雑さに応じて、これがコンパイルにどのような影響を与えるかは完全にはわかりません(行がコンパイルされる有効なコードであるかどうかを識別します)。また、人々はIDEがこれをリアルタイムで管理することを期待します(言語の構文の複雑さと、さまざまな構造やエラーを見つけて強調表示するIDEの応答性の間に関係があります)。


私は自分の混乱とラッシュを管理しようとしています。そして、それがすべてが始まるところだと私は完全に同意します。しかし、それは現在起こっており、コメントアウトするコードから解放されるとすぐに、誰かが私の代わりをするでしょう。たぶん私はしつこいだけです。結局、それはそれほど大きな問題ではありません。技術的な側面については、IDEはそれらを通常のコメントとして処理したり、色を使用したり、非表示にしたりすることもできます。多くのIDEは、他の構文要素に対してすでにこれをサポートしています。
Deltreme 2011

@deltreme IDEが表面上どのようにサポートするかは気にしません。IDEは、正確でありながら応答性を維持する方法でそれらをどのように見つけて処理しますか?トークンを言語に追加したり、テキスト処理を追加したりすると、解析が遅くなったり、不正確な結果が生成されたりする可能性があります。
トーマス・オーエンス

議論がこのように進むとは思いませんでした:)そして、別のトークンを追加すると(最近のIDEは今日何個を認識しますか)、エディタの応答性が悪くなるとは思いません。この「プロジェクト」の調査段階でも潜在的な脅威であると思われる場合、パフォーマンスの低下率(%)はどの程度かを推定できますか?トークンを追加し、IDEでトークンに色を付けたいとします。
deltreme

@deltremeほとんどのプロジェクトでそれだけの時間を追加できるとは思いませんが、時間の追加/付加価値に関しては、比率は非常に低くなります。さらに数マイクロ秒から数万のソースファイルを追加する必要がある場合は、ソースファイルを解析するたびに、ソースファイルを解析するすべてのものにミリ秒を追加しただけです。IDEの場合、これは通常、保存するたびです。また、コミット後および/または毎日のビルドにも影響します。これらのミリ秒を複合すると、プロジェクトのライフタイム全体で数分で非常に迅速に測定可能になり、付加価値のない機能を処理できます。
トーマスオーエンス

1
@deltreme絶対にありません。プロジェクトでコードを無効にしてソース管理にした場合、それは間違っています。メソッドを書き換えている場合は、古いメソッドをコメントアウトして再実装することもありますが、新しいコードがテストに合格し、意図したとおりに機能することを確認したら、無効なコードを削除してチェックインします。無効化されたコードを実際にチェックインするか、何らかの方法でそれに依存することは、対処する必要があるプロジェクトのより大きな問題の兆候です。
Thomas Owens

4

使用している言語にコメント構文が1つしかない場合でも、独自のフレーバーを追加できますが、//が無効な行を示し、//-がコメントを示すプロジェクトで作業しました。組み込みの場合ほどは良くありませんが、ほとんどのIDEは、異なる目的で異なる構文を使用したことを認識していないため、違いを確認するための古い方法が最も効果的である場合があります。


チームがこのフレーバーに専念している場合、それは確かに良い回避策です。「オンフック」も可能で、コメント用の余分な文字を忘れた場合も警告されます。
deltreme

1

答えに反対して、私は「はい、異なる構文があるはずです!」と答えます。

どんな開発者にも、コードをコメント化せずに1日でもコーディングを行うと言ってみてください。そうすることは、ソース管理を知らない、または怠惰であることを意味しません。Thomas Owensが彼の反対の答えで言ったように、「私がコード/テスト/コード/テスト...モードにいるときを除いて、未使用のコードにはコメントしません。

コード/テスト/コード/テストモードで費やされた時間はどれくらいですか?私にとっては、それは少なくとも90%の作業です。現時点では、大規模なOSXプロジェクトをiOSに変換しています。最初のステップは、機能するスタブができるまで、壊れていたすべてのコードを無効にすることでした。次の数週間は、コードが機能するようになったら、コメントを外してコードを修正します。

他にも多くのケースがあります。「Windowsの場合は次のコメントを外す」や「iPhone専用アプリの場合はこの行のコメントを外す」などの指示がよく見られるサンプルコードを使用している場合はどうでしょうか。

はい、ずっとソース管理を使用します。しかし、はい、無効なコードと実際のコメントを区別する方法が欲しいです。

要約すると、コードを無効にするためにコメントを使用しないと言うプログラマーはうそをついています。HEADにコミットする洗練されたファイル以外にも、コーディングには多くのものがあります。コードが無効になるのには多くの正当な理由があります。

はい、実際のコメントと無効化されたコードを区別する構文(または少なくとも規則)があればよいでしょう。

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