C#では、#warning
および#error
ディレクティブを使用します。
#warning This is dirty code...
#error Fix this before everything explodes!
このようにして、コンパイラーは私にまだやるべきことがあることを知らせてくれます。あなたはそれを忘れないようにコードをマークするためにどのテクニックを使用しますか?
// TODO
、// HACK
、またはVisual Studioのタスクペインに表示される他のコメントトークンでマークします。
タスクリストの使用 を参照してください。
Todoコメントも。
また、特別なキーワードNOCHECKINを追加し、ソース管理システムにコミットフックを追加しました(少なくともcvsまたはsvnを使用すると非常に簡単に実行できます)。テキストNOCHECKINどこでも。
これは、何かをテストして、誤ってチェックインされないことを確認したい場合に非常に便利です(ソース管理にコミットされたすべての差分中に注意深い目を渡しました)。
メソッドで_//TODO:
_ _//HACK:
_とthrow new NotImplementedException();
の組み合わせを使用して、実行されなかった作業を示します。また、Visual Studioの不完全な行にブックマークを追加します。
// TODO:人の名前-これを修正してください。
これはJavaで行われるため、Eclipseでこのタグへのすべての参照を見つけるタスクを確認し、TODOを他の誰かに割り当てることができるように個人でグループ化するか、自分のタスクのみを見ることができます。
変更の途中ですべてを削除する必要がある場合は、
#error finish this
後で行う必要がある場合は、バグトラッカー(すべてのタスクに使用されます)に送られます。
「やること」のコメントは理論的には素晴らしいですが、少なくとも私の経験では、実際にはそれほど良くありません。あなたがそれらを必要とするのに十分長く引き離そうとするなら、彼らは忘れられる傾向があります。
私はJon Tの一般的な戦略を好みますが、通常は単純に一時的にコードを壊すだけでそれを行います-私はしばしば意図的に未定義のメソッド参照を挿入し、コンパイラーに何を返す必要があるかを思い出させます:
PutTheUpdateCodeHere();
無効状態のテストを追加します。すべてのビルドレポートに表示されます。
それでもうまくいかない場合は、バグを報告します。
特に、TODOのコメントが意味のある形で減少するのを見たことはありません。私がコメントを書いたときにそれをする時間がなかったなら、なぜ後で時間があるのか分かりません。
Oren Eini here で示されているように、私が本当に気に入っているアプローチは「Hack Bombing」です。
try
{
//do stuff
return true;
}
catch // no idea how to prevent an exception here at the moment, this make it work for now...
{
if (DateTime.Today > new DateTime(2007, 2, 7))
throw new InvalidOperationException("fix me already!! no catching exceptions like this!");
return false;
}
//TODO: Finish this
VSを使用する場合は、[ツール]> [オプション]> [環境]> [タスクリスト]で独自のタスクタグを設定できます。
gvimは、「// XXX」と「// TODO」の両方を黄色で強調表示します。これは、コードに最初に戻ってそれを思い出させるためにコードをマークしたときに初めて驚きました。
// TODO:または// HACK:を使用して、何かが未完成であることを説明し、その理由を説明します。私はしばしば(「まれに」と読みます)時間の制約のために戻ってそれらを終了します。しかし、コードを見ていると、何が未完成で、さらに重要なのはなぜかという記録があります。
1日または1週間の終わりによく使うもう1つのコメント:
//ここからクリスを開始
^^^^^^^^^^^^^^^^^^^^月曜日の朝にbootstrap時間を最小化できるように、中断した場所を教えてくれます。
私はC++プログラマですが、私の技術はC#やその他の言語で簡単に実装できると思います。
コンストラクターがログメッセージを出力するローカルスコープで静的オブジェクトの構築に展開するToDo(msg)
マクロがあります。そうすることで、未完成のコードを初めて実行したときに、ログ出力にリマインダーが表示され、タスクを延期できないことを通知します。
次のようになります。
class ToDo_helper
{
public:
ToDo_helper(const std::string& msg, const char* file, int line)
{
std::string header(79, '*');
Log(LOG_WARNING) << header << '\n'
<< " TO DO:\n"
<< " Task: " << msg << '\n'
<< " File: " << file << '\n'
<< " Line: " << line << '\n'
<< header;
}
};
#define TODO_HELPER_2(X, file, line) \
static Error::ToDo_helper tdh##line(X, file, line)
#define TODO_HELPER_1(X, file, line) TODO_HELPER_2(X, file, line)
#define ToDo(X) TODO_HELPER_1(X, __FILE__, __LINE__)
...そして、あなたはこれを次のように使用します:
void some_unfinished_business() {
ToDo("Take care of unfinished business");
}
完全な世界ではありません。また、コードをリファクタリングまたは熟考するための無限の時間があるとは限りません。
後で戻ってきたい場合は、コードに//REVIEW
を入れることがあります。つまり、コードは機能していますが、おそらくそれが最良の方法であると確信していません。
// REVIEW - RP - Is this the best way to achieve x? Could we use algorithm y?
//REFACTOR
についても同様です
// REFACTOR - should pull this method up and remove near-dupe code in XYZ.cs
これらは、対処する必要があるものにフラグを立てるのに役立つとわかった3つの異なる方法です。
調べる必要があるコードの横にコメントフラグを配置します。ほとんどのコンパイラは、一般的なフラグを認識し、整理された方法で表示できます。通常、IDEには、これらのフラグ専用に設計されたウォッチウィンドウがあります。最も一般的なコメントフラグは、次のとおりです。
// TODO:リリース前に修正してください。これにより、まだ作成されていないメモリを使用しているため、アクセス違反が発生します。
リリース前に対処する必要があるものにフラグを立てる1つの方法は、無用な変数を作成することです。使用されない変数がある場合、ほとんどのコンパイラは警告を表示します。この手法の使用方法は次のとおりです。
int This_Is_An_Access_Violation = 0;
IDEブックマーク。ほとんどの製品には、今後の参照用にコードにブックマークを配置する方法が用意されています。あなただけが見ることができることを除いて、これは良い考えです。コードを共有するとき、ほとんどのIDEはブックマークを共有しません。 IDE=のヘルプファイルシステムをチェックして、ブックマーク機能の使用方法を確認できます。
Todoコメント。
長期の技術的負債 の場合、次のようにコメントできます。
// TODO: This code loan causes an annual interest rate of 7.5% developer/hour. Upfront fee as stated by the current implementation. This contract is subject of prior authorization from the DCB (Developer's Code Bank), and tariff may change without warning.
...エラー単純に無視しない限り、TODOがそれを行うと思います。
壊れたコードには// FIXME:xxxを使用し、注意が必要だが機能するコードには// CHGME:xxxを使用します(おそらく限られたコンテキストでのみ)。
// TODO: <explanation>
それが実装に回っていないものであり、忘れたくない場合。
// FIXME: <explanation>
うまくいかないと思うので、後で戻ってきたり、他の人に見てもらいたい場合。
#error /#warningオプションを考えたことはありません。それらも重宝します。
「TODO:」コメントをキーオフすることに加えて、多くのIDEは「TASK:」コメントをキーオフします。一部のIDEでは、独自の特別な識別子を設定することさえできます。
ほとんどのプログラマがここで行うように、私はTODOコメントを使用します。さらに、Eclipseのタスクインターフェイス Mylyn を使用します。タスクがアクティブになると、Mylynは開いたすべてのリソースを記憶します。この方法で追跡できます
TODO:コメントも使用します。実際に修正されることはめったになく、バグとして報告するほうがよいという批判を理解しています。しかし、私はそれがいくつかの点を見逃していると思います:
絶えずリファクタリングと再設計を行っている大規模な開発中にそれらを最もよく使用します。だから私は常にそれらを見ています。そのような状況では、それらのほとんどは実際に対処されます。さらに、TODOを検索するのは簡単です。何も見逃していないことを確認します。
あなたのコードを読んでいる人々にとって、あなたが不十分に書かれた、または一緒にハッキングされたと思うスポットを知ることは非常に役立ちます。なじみのないコードを読んでいる場合、組織パターン、命名規則、一貫性のあるロジックなどを探す傾向があります。便宜上、その一貫性を1〜2回違反する必要がある場合は、その旨のメモを参照してください。そうすれば、ロジックがないところを見つけようとして時間を無駄にしません。