コードにコメントを付けることは、コードを次の人、または6か月ほどで自分自身に理解できるようにするためのコーディングスタイルの重要な部分であることは誰もが知っています。
ただし、コメントでマスタードが切れない場合もあります。私は明白なジョークやベントされたフラストラトンについて話しているのではなく、説明を試みているように見えるコメントについて話しているのですが、あまりにも貧弱なため、そこにいない可能性があります。 短すぎる、不可解すぎる、またはまったく間違っているのコメント。
おとぎ話として、あなたが見たもので本当にただのことを共有できますかその悪いそしてそれが明白でない場合は、それが参照していたコードを示し、それの何が悪いのかを指摘しますか?代わりに何すべきそこに入ったのですか?
参照:
典型的なCompSci 101タイプのコメント:
$i = 0; //set i to 0
$i++; //use sneaky trick to add 1 to i!
if ($i==$j) { // I made sure to use == rather than = here to avoid a bug
そういうこと。
埋められていないjavadoc定型コメントは特に役に立ちません。彼らは何も役に立たずに多くの画面領域を消費します。そして最悪の部分は、そのようなコメントの1つが現れるところに、他の何百ものものが確かに遅れているということです。
/**
* Method declaration
*
*
* @param table
* @param row
*
* @throws SQLException
*/
void addTransactionDelete(Table table, Object row[]) throws SQLException {
私は以前にこの小さな宝石を書いていることに気づきました:
//@TODO: Rewrite this, it sucks. Seriously.
通常、その夜のコーディングセッションが終了したことを示す良い兆候です。
// remember to comment code
wtf? :D
このようなもの:
// This method takes two integer values and adds them together via the built-in
// .NET functionality. It would be possible to code the arithmetic function
// by hand, but since .NET provides it, that would be a waste of time
private int Add(int i, int j) // i is the first value, j is the second value
{
// add the numbers together using the .NET "+" operator
int z = i + j;
// return the value to the calling function
// return z;
// this code was updated to simplify the return statement, eliminating the need
// for a separate variable.
// this statement performs the add functionality using the + operator on the two
// parameter values, and then returns the result to the calling function
return i + j;
}
等々。
コードの内容を繰り返すだけのコメントはすべて役に立たない。コメントは、コードが何をするのか教えてはいけません。プログラミング言語を十分に理解していない場合、コードを読むだけで何が起こっているのかを理解するには、そのコードをまったく読んではいけません。のようなコメント
// Increase i by one
i++;
完全に役に立たない。私は私が1つ増えているのがわかります、それはコードが言っていることです、私はそれについてコメントする必要はありません!コメントを使用して説明する必要があります理由何かが行われている(それが明白であるとはほど遠い場合)または理由何かがそのように行われ、他の方法ではない(だから私はできる別のプログラマーが行った特定の設計上の決定を理解します。これは、一度には明らかになりません)。トリッキーなコードを説明するために、さらにコメントが役立ちます。コードをざっと見て何が起こっているのかを判断することは絶対に不可能です(たとえば、数値に設定されたビット数をカウントするトリッキーなアルゴリズムがあります。そうでない場合。このコードが何をするかを知っていれば、そこで何が起こっているのかを推測する機会はありません)。
Thread.Sleep(1000); // this will fix .NET's crappy threading implementation
私はかつて奇妙なCコンパイラでプロジェクトに取り組んだことがあります。 2つのステートメントの間にコメントが挿入されていない限り、有効なコードでエラーが発生しました。そこで、コメントを次のように変更しました。
// Do not remove this comment else compilation will fail.
そしてそれはうまくいきました。
私はそれを信じていません。 22の回答があった後、私はこの質問に答えましたが、最も役に立たないタイプのコメントを指摘した人は誰もいませんでした。
間違っているコメント。
人々がコードを理解するのを邪魔する余分なコメントを書くのは十分に悪いことですが、誰かが何かがどのように機能するかを説明する詳細なコメントを書いたとき、それはそもそも間違っているか、コメントを変更せずにコードを変更した後に間違っています(はるかに可能性の高いシナリオ)、それは間違いなく最悪の種類のコメントです。
GhostDocは、それ自体でかなり興味深いものをいくつか考え出します。
/// <summary>
/// Toes the foo.
/// </summary>
/// <returns></returns>
public Foo ToFoo()
// secret sauce
// Don't know why we have to do this
try
{
...some code...
}
catch
{
// Just don't crash, it wasn't that important anyway.
}
*はぁ
ファイルに一度出くわした。数千行のコード、そのほとんどは非常に恐ろしいものです。間違った名前の変数、ループのトリッキーな条件、ファイルの途中に埋め込まれた1つのコメント。
/* Hmmm. A bit tricky. */
//' OOOO oooo that smell!! Can't you smell that smell!??!??!!!!11!??/!!!!!1!!!!!!1
If Not Me.CurrentMenuItem.Parent Is Nothing Then
For Each childMenuItem As MenuItem In aMenuItem.Children
do something
Next
If Not Me.CurrentMenuItem.Parent.Parent Is Nothing Then
//'item is at least a grand child
For Each childMenuItem As MenuItem In aMenuItem.Children
For Each grandchildMenuItem As MenuItem In childMenuItem.Children
do something
Next
Next
If Not Me.CurrentMenuItem.Parent.Parent.Parent Is Nothing Then
//'item is at least a grand grand child
For Each childMenuItem As MenuItem In aMenuItem.Children
For Each grandchildMenuItem As MenuItem In childMenuItem.Children
For Each grandgrandchildMenuItem As MenuItem In grandchildMenuItem.Children
do something
Next
Next
Next
End If
End If
End If
IDEによって挿入されるデフォルトのコメント。
WebSphere Application Developerを使用して私が取り組んだ最後のプロジェクトには、数千とは言わないまでも数百のJavaクラスのようなものを含むクラスに悩まされていないように見える、多くの保守開発者と請負業者がいました。この:
/**
* @author SomeUserWhoShouldKnowBetter
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
よくコメントされたソースファイルを実際に見つけたと思ってから、それが別のデフォルトのコメントであることに気付くまで、常にその一瞬があり、SWEAR_Word_OF_CHOICE
を使用せざるを得ませんでした。
私は昨日C#アプリでこのコメントを見ました:
//TODO: Remove this comment.
私のお気に入りのコメント。
/* our second do loop */
do {
それを書いた人は誰でも-あなたはあなたが誰であるかを知っています。
何年も前のCでの非常に大規模なデータベースエンジンプロジェクト-短い変数名とスペルミスのある変数名を含む数千行のコード、コメントなし...モジュールに数千行のネストされたif条件が深くなるまで、次のコメントが表示されました:
//if you get here then you really f**ked
その時までに、私たちはすでにそれを知っていたと思います!
私のいずれかから取得 ブログ投稿 :
私が管理しているプロジェクトの1つのソースコードの一部をクリーンアップする過程で、次のコメントに出くわしました。
/*
MAB 08-05-2004: Who wrote this routine? When did they do it? Who should
I call if I have questions about it? It's worth it to have a good header
here. It should helps to set context, it should identify the author
(hero or culprit!), including contact information, so that anyone who has
questions can call or email. It's useful to have the date noted, and a
brief statement of intention. On the other hand, this isn't meant to be
busy work; it's meant to make maintenance easier--so don't go overboard.
One other good reason to put your name on it: take credit! This is your
craft
*/
そして少し下に:
#include "xxxMsg.h" // xxx messages
/*
MAB 08-05-2004: With respect to the comment above, I gathered that
from the filename. I think I need either more or less here. For one
thing, xxxMsg.h is automatically generated from the .mc file. That might
be interesting information. Another thing is that xxxMsg.h should NOT be
added to source control, because it's auto-generated. Alternatively,
don't bother with a comment at all.
*/
そしてまたもや:
/*
MAB 08-05-2004: Defining a keyword?? This seems problemmatic [sic],
in principle if not in practice. Is this a common idiom?
*/
AHHHRRRGGHHHいくつかの古代のコードでこれを見つけただけで、男は彼がかなり面白いと思ったに違いない
private
//PRIVATE means PRIVATE so no comments for you
function LoadIt(IntID: Integer): Integer;
巨大なVB5アプリケーションで
dim J
J = 0 'magic
J = J 'more magic
for J=1 to 100
...do stuff...
参照は明らかに [〜#〜] this [〜#〜] ...です。そうです、これらの2行のないアプリケーションは、実行時に不明なエラーコードで失敗します。理由はまだわかりません。
最悪のコメントは、コードの機能について間違った説明をするコメントです。それはコメントがまったくないよりも悪いです。
私はコードでこの種のことをあまりにも多くのコメントで見ました(コードはそれ自体で十分に明確であるため、そこにあるべきではありません)、そしてそれは主にコードが更新されたとき(リファクタリング、変更など)に起こりますしかし、コメントはそれに伴って更新されません。
経験則としては、コメントを書いて説明するだけですwhyコードは何かをしているのであって、whatはしていません。
間違いなく、エラー処理の代わりとなるコメントである必要があります。
if(some_condition){
do_stuff();
}
else{
//An error occurred!
}
コメントアウトされたコード行の前の行に書かれている、これを見つけました。
//This causes a crash for some reason. I know the real reason but it doesn't fit on this line.
vb6からvb.netに移植された100kLOCアプリケーション。以前の開発者が1つのメソッドにコメントヘッダーを配置し、それ以降に作成したすべてのメソッドに正確なコメントをコピーして貼り付けたように見えます。何百ものメソッドとそれぞれが誤ってコメントしました...
私が最初にそれを見たとき、私は笑いました... 6か月後、冗談は薄く着ています。
これは、データベーストリガーからの絶対に実際の例です。
/******************************************************************************
NAME: (repeat the trigger name)
PURPOSE: To perform work as each row is inserted or updated.
REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 27.6.2000 1. Created this trigger.
PARAMETERS:
INPUT:
OUTPUT:
RETURNED VALUE:
CALLED BY:
CALLS:
EXAMPLE USE:
ASSUMPTIONS:
LIMITATIONS:
ALGORITHM:
NOTES:
******************************************************************************/
/** function header comments required to pass checkstyle */
私が非常に役立つと思ったことのないもの:
<!--- Lasciate ogne speranza, voi ch'intrate --->
私が今まで見た中で最も役に立たない2つのコメント...
try
{
...
}
catch
{
// TODO: something catchy
}
これもDailyWTFに投稿したので、コメントだけにトリミングします...
// TODO: The following if block should be reduced to one return statememt:
// return Regex.IsMatch(strTest, NAME_CHARS);
if (!Regex.IsMatch(strTest, NAME_CHARS))
return false;
else
return true;
自動javadocツールによって生成されたコメント(例: JAutoDoc )。チームメンバーに、次のようにコメントされた大量のコードを送信してもらいました。
/**
* Gets the something
*
* @param num The num
* @param offset The offset
*/
public void getSomething(int num, bool offset)
出発点として役立つかもしれませんが、定義上、プログラムが変数名とメソッド名を解析してコメントを作成している場合は、あまり役に立ちません。
私はこれらをたくさん持っています:
# For each pose in the document
doc.elements.each('//pose') do |pose| ...
# For each Sprite in sprites
@sprites.each do |Sprite| ...
# For each X in Y
for X in Y do ...
しかし、私はそれを削減しようとしています。 :(
私がC++またはJavaでOOPを教えるときはいつでも、私は通常次のようになります:
// My class!
Class myclass
{
//Default constructor
public myClass()
{
...
}
}
私の方針は、不十分な文書と余分な文書の両方でポイントを失うことを学生に発表することです
私たちはPHPアプリケーションのひどい混乱を維持しており、元の開発者はその場所に「デバッグコード」をコメントアウトしたままにする習慣がありました。彼がいつも言っていたように、それは「彼が必要な場合に備えて繰り返しになりますが、彼はコメントを外して出来上がりなので、多くの作業を節約できます。」.
したがって、すべてのスクリプトは文字通り次のような行でいっぱいです。
//echo "asdfada";
//echo $query."afadfadf";
それらのどれも実際には機能していません。それらは主に、コードの実行がそのポイントに到達したことを確認するためにあります。
関連するメモとして、彼は廃止されたスクリプトやデータベーステーブルを削除したことはありません。したがって、dosomething.php、dosomething1.php、dosomething1.bak、dosomething1.bak.phpなどのファイルで満たされたディレクトリがあります...誰もが実際に使用されているものを知らないため、誰もが何かを削除することを恐れています。
#include <stdio.h>
//why isn't this working!
/*-style */
グローバルコメントのみをサポートするc-compilerを使用。
典型的なCompSci 101タイプのコメント:
私は、生徒が宿題でこれを行った場合、極端な暴力行為をランダムに行うと脅迫しました。そして彼らはまだしました。しかし、適切なインデントの感覚は完全に失われているように見えました。 Pythonが初心者にとって理想的な言語である理由を示します。
これが私の2つのお気に入りです:
// do nothing
スペースをとるだけなので、これは実際には役に立ちません。
その後、さらにどこかに:
// TODO: DAN to fix this. Not Wes. No sir. Not Wes.
私がダンでもウェスでもないのなら、これは無視すべきだと思いますよね?
過度の冗長性は、何が起こっているのかを明確にしません。これは携帯電話のファームウェアからのものです
/*========================================================================
FUNCTION
DtFld_SetMin
DESCRIPTION
This local function sets a nMin member of the Dtfld struct.
DEPENDENCIES
None
ARGUMENTS
[in]me
Pointer to the Dtfld struct.
[in]val
Value to set
RETURN VALUE
None.
SIDE EFFECTS
None
NOTE
None
========================================================================*/
/**
@brief This local function sets a nMin member of the Dtfld struct..
@param [in] me Pointer to the Dtfld struct.
@param [in]val Value to set
@retval None
@note None
@see None
*/
static __inline void DtFld_SetMin(DtFld *me, int val)
{
me->nMin = val;
}
私の研究はAPIの使いやすさを扱っており、誤解を招く、見当違い、不正確、または不完全であるという理由だけで悪いコメントをたくさん目にしました。
たとえば、Javaメッセージングサービス(JMSまたはJ2EE内)では、QueueReceiver.receiveクラスに次のgemが含まれます: "この呼び出しは、メッセージが到着するか、タイムアウトが期限切れになるか、このメッセージコンシューマーになるまでブロックされます。ゼロのタイムアウトが期限切れになることはなく、コールは無期限にブロックされます。」
いいね?正しい?
問題は、私のラボの調査が示すように、コメントがすべてをカバーしているとユーザーが信じていることです。メッセージが届かない状況に直面して、彼らは説明を他の場所で探すことを拒否します。
この場合、QueueConnectionFactoryからQueueConnectionを作成すると、startが呼び出されるまでメッセージが配信されないことが通知されます。しかし、それはreceiveメソッドには表示されません。
その線がなかったら、もっと多くの人が他の場所でそれを探していただろうと私は信じています。
ちなみに、私の研究では、JavaDocのユーザビリティ全般と、人々がJavaDocsで重要なディレクティブを実際に見つけるかどうかを扱っています。誰かが見てみたいなら、関連するのは ここ です。
cntrVal = ""+ toInteger(cntrVal) //<---MAYBE THIS IS THE WAY I'M GOING THROUGH CHANGES (comin' up comin' up) THIS IS THE WAY I WANNA LIVE
それはEタイプの曲からの歌詞です...
無関係なコメントが壊れます。通常、フローが論理的に分離されている場合は、次のようなコメント行があります。
/***************************************************************************/
コードのそのセクションの上下が役立つ場合があります。また、後で戻って大きな関数(最初は小さな関数)をいくつかの小さな関数に分割して、コードを読みやすくする必要がある場合にも便利です。
名前のないままでいる元プログラマーは、次の2行を追加することにしました。
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
後コードの1行ごと。
あるコードで次のコメントを見たら:
//I know that this is very ugly, but I am tired and in a hurry.
//You would do the same if you were me...
//...
//[A piece of nasty code here]
// initialise the static variable to 0
count = 1;
私はこれを行うのに非常に悪い習慣があります、特に私が転がっているとき:
// TODO: Documentation.
非常に大きなソースファイルで、単一のプロセスでマルチスレッドを実装します。すべてのコールスタックの切り替えとセマフォの取得、スレッドの一時停止と再開の真っ只中に、ポインタ操作の特にあいまいなビットに関する簡単なコメントがありました。
/* Trickiness */
ジー、共有してくれてありがとう。
// 幸運を
私は2つの言語(英語とフランス語)で働いていますが、私のお気に入りのコメントはフランス語でした:
/* La passe du coyote qui tousse */
翻訳すると、次のようになります。
/* The coughing coyote trick */
これは通常、作成者にとって巧妙なアイデアのように見えて完全にあいまいなコードのセグメントを表すか、作成者でさえそれが機能する理由を理解していなかった奇妙なバグ修正でした(ifステートメントを移動して競合状態を修正することを考えてください)。すべての場合において、それを変更することの効果を予測することは非常に困難であったため、それをリファクタリングしなければならない人を怖がらせるのは、不十分に書かれたコードでした。
昔々、私は見ました:
#region This is ugly but a mas has to do what a man has to do
Initialization of a gigantic array (...)
#endregion
// Aren't you glad this has ended?
私はその開発者でなくてよかったです。
add ax,1 ;add 1 to the accumulator
真剣に?そのコメントは私の人生の5秒を無駄にしました。
また、古いコメントFTL
//the system can only handle 5 people right now. make sure where not over
if(num_people>20){
あまりコメントではありませんが、私がかつて使用しなければならなかったシステムのAPIを記述したJavaDocからです。
setAttribute(attributeName、attributeValue)属性を設定します
属性が何であるか(HTML/XML/etc属性ではない)、存在する属性、またはそれらが持つことができる値はどこにも文書化されていませんでした。
// Magic
menu.Visible = False
menu.Visible = True
これは、私が以前作業していたPowerBuilderコードのUIフレームワークからのものです。フレームワークは、メニュー項目を動的に(データベースデータから)作成しました。ただし、PowerBuilderを16ビットから32ビットにアップグレードすると、メニューコードが機能しなくなりました。リード開発者は、メニューを非表示にしてから表示すると、メニューが正しく表示されるとどういうわけか判断しました。
/// <summary>
/// Disables the web part. (Virtual method)
/// </summary>
public virtual void EnableWebPart() { /* nothing - you have to override it */ }
私が今まで出会った中で最もおかしなものの1つ。
// HACK HACK HACK. REMOVE THIS ONCE MARLETT IS AROUND
不思議に思ったもの。
// this is a comment - don't delete
これまで誰もこのような投稿をしていなかったことに驚いています。
#contentWrapper{
position:absolute;
top: 150px; /*80 = 30 + 50 where 50 is margin and 30 is the height of the header*/
}
明白な間違ったコメントは、最悪の種類のコメントです。
私はこれをソフトウェアのINIファイル(少し前に私にダンプされたものの1つ)で見ました)私は維持しています:
;--- if LOGERR=1, errors are logged but debugging is difficult
;--- if LOGERR=0, errors are not logged but debugging is easy
LOGERR=1
さて、デバッグは確かに難しかったですが、私はあえて設定を変更しませんでした。
// yes, this is going to break in 2089, but, one, I'll be dead, and two, we really ought to be using
// a different system by then
if (yearPart >= 89)
{
// naughty bits removed....
}
(コメントが進むにつれて役に立ちませんが、どちらも真実のステートメントです。)
/* FIXME: documentation for the bellow functionality - and why are we doing it this way */
それは会計アプリケーションのための巨大な統計プログラムでした。私たちは、なぜ彼女がそれを-間違った-方法でやったのか理解できませんでした。しかし、私たちはそれを書き直さなければならず、顧客にペナルティを支払いました。
今日、宣言のブロックの真ん中でこれを見つけました:
// other variables
ねえ、本当に?ありがとう。
1000行を超えるがコメントのないJavaクラスにいくつかの変更を加えています。私はコーディングスタイルの初心者なので、次のようなコメントを追加するのは仕方がありません。
/*Added because someone asked me to add it*/
if (returnValue ==0)
doStuff();
else
System.out.println("Beware of you, the Dragons are coming!");
/**
* Implements the PaymentType interface.
*/
public class PaymentTypePo implements PaymentType
この:
うん、空白スペース、Subversion変更ログとして残されています。
私が遭遇した最も役に立たないタイプのコメントは、第二言語のコメントであると言わざるを得ません。
私は、英語の非常に貧弱な近似で走り書きするよりも、誰かの母国語ではっきりと書かれたコメントを見たいと思います。少なくともその時、その言語のネイティブスピーカーはそれを翻訳することができました。 ESLのコメントは、それを書いた人を除いて、地球上の誰もが読めないことが多く、時には彼らによってさえも読めません。
// Undocumented
私はかつて、ハリスのミニコンピューター用にカスタマイズしたオペレーティングシステムコードを保守していました(はい、これはかなり前のことです)。ある日、スケジューラコード(アセンブラ)を調べてみると、上部に「Begin Magic」というコメントがあり、約25行後に「EndMagic」というコメントがあるコードブロックに出くわしました。その間のコードは、私が今まで見た中で最もタイトで、最も複雑で、エレガントなコードの一部でした。コードのその小さなセクションが実際に何をしているのか(VMスイッチング)を理解するのに4人かかりました。
恥ずかしさを避けるために名前を削除しましたが、これは一部の製品コードで見つかったコメントです。残念ながら、これはASPコードであり、VB6モジュールを参照しており、顧客は非常に好奇心旺盛だったため、コンサルタントの訪問中に現場にいる間にコメントを指摘してくれたのは彼女でした。幸いなことに、彼女はそれについてユーモアのセンスを持っていました。
'この@ "%&がどのように機能するのかわかりません。その請負業者によって作成された&£$!の負荷です---------。
そのままにしておき、誰も変更する必要がないことを願っています。
残念ながら、私にとってコードは約1年後に変更する必要がありました。その時点で、ソースコードがなく、ジャンクして無料で書き直す必要がありました。
//リターン
return;
私はこれをねじれたプログラムで見つけました
# Let them send messages to the world
#del self.irc_PRIVMSG # By deleting the method? Hello?
私はかつて、いくつかのマクロで基本的なARM命令セットを拡張した非常に才能のあるアセンブリ言語プログラマーと協力しました。彼のコードは数万命令は次のようになりました-私(有能なARMプログラマー)が???で表されて読むことができなかったマクロ命令と時折通常のARM = ADDのような命令:
... ??? R0、R0、#1 ??? R0、R1 ADD R0、R0、#6; 6 を追加しますか? R1、R0 ??? R0、R0、R1 ...
あなたが惑星の大きさの脳を持っているとき、それはあまりにも単純すぎるそれらの厄介な指示に対処するには高すぎる眉であると私は推測することができるだけです。
誰かの名前やイニシャル、それだけです。これらの署名がコードのブロックを定義する場合があります...
//SFD Start
...code...
//SFD End
コードがそのような芸術作品であるように、彼らはそれに署名しなければなりません!さらに、他の誰かがこのようにマークされたコードを変更する必要がある場合はどうなりますか?
これを、ソース管理システムの「非難」または「注釈」機能と混同しないでください。
これは、マッピング製品のサンプルアプリケーションで見つかりました。
// Return value does not matter
return 0;
if (someFlag)
{
// YES
DoSomething();
}
else
{
// NO
DoSomethingElse();
}
それを絶えずやっていた一人の男がいました、チームの残りは結局彼にそれをやめるように説得しました!
これは私が大学での私のグループの最後のプロジェクトでファイルに書いたコメントです
/* http://youtube.com/watch?v=oHg5SJYRHA0 */
私たちが仕事でいつも冗談を言っている古典(タイプミスあり):
// Its stupid but it work
これは、古いコードベースで複数回見つかりました。
オーディオをGSMからmu-lawにトランスコードする2000行のコードのバグを修正する必要がありました(主にビットシフトと変換値の配列を使用)。ファイル内の唯一のコメントは、ファイルで定義されている唯一のメソッドの先頭にありました。そうだった:
/* Do the business */
これをメモリから引用するため、正確ではない可能性があります。
これが何をするのかわかりませんが、うまくいくようですので触れていません。
面白いのは、私がそれを見つけた方法です。このコメントは、当社の一部の開発者がクライアント用に作成し、MDBで配布したアクセスアプリケーションに埋め込まれていました。残念ながら、「動作しているように見える」コードが爆撃され、Accessはコードウィンドウを忠実に開き、デバッガーがコメントのすぐ下の行を強調表示しました。それはその顧客への信頼を正確に刺激しませんでした。
今日はやっかいなことに出くわした。それがExcelワークブックのVBAマクロの一部であったことを考えると、私はそれを期待すべきでした。
a.writeline s 'write line
これを書いた人が、スペースを使って、信じられないほど混乱している「writeline」コマンドをクリアするコメントを書くのに時間がかかったのは特に魅力的でしたが、意味のある変数名を使用する必要はありませんでした。私が知る限り、aは「ファイル」の略であり、sは「文字列」の略です(「a」はすでに使用されているため)。
レガシーコードから取得した、これは次のif
条件の目的の唯一の説明でした(条件は120列で4行にまたがっていました):
#-- Whoa, now that's a big if condition.
今日これを見つけました...
// TODO: this is basically a copy of the code at line 743!!!
私はかつてVB.NETアプリでこの小さな美しさに出くわしました
Dim huh as String 'Best name for a variable ever.
ランダムに、コードの途中で:
//???
ゲームのAI部分の中に素晴らしいコードを見ました:
..."AI code"...
if(something)
goto MyAwesomeLabel; //Who's gonna be the first to dump crap on me for this?
..."More Ai code"...
MyAwesomeLabel:
//It wasn't that hard to get here, right?
..."Even more AI code"...
/* this is a hack.
ToDo: change this code */
# Below is stub documentation for your module. You'd better edit it
私が覚えているもう一つ:
//TODO: This needs to be reworked. THIS CRAP NEEDS TO STOP!!!
//I am not sure why this works but it fixes the problem.
これは私の役に立たないコメントのリストの一番上にあります。
質問に完全には適合していませんが、私は次のことを見ると嫌いです:
try
{
someSeeminglyTrivialMethod();
}
catch (Exception e)
{
//Ignore. Should never happen.
}
コードレビュー中にそれを見つけたときはいつでも、キャッチを次のように置き換えるように指示します。
catch (Exception e)
{
System.exit(0);
}
{
Long complicated code logic //Added this
}
レガシー通信アプリケーションに取り組んだときからの私のお気に入り。
// Magic happens here...
このコメントは実際には別の言語で書かれていますが、翻訳で効果を伝えようと思います。
//we trick it, if forbidden, as if it had already existed
コメントが説明しようとしていたのは、オフにされたリストアイテムの処理方法でした。コードはアイテムを重複としてマークしたため、スキップする必要があります。はい、非常に低音の扱いにくい方法ですが、無意味なコメントと比較すると見劣りします。
// this is messed up, and no one actually knows how it works anymore...
[some code]
// [a commented out code line]
// this line added 2004-10-24 by JD.
// removed again 2004-11-05 by JD.
// [another commented out code line]
[some more code]
a)なぜですか? b)どの行ですか?
私は最近、私が何年も前に書いたいくつかのコードでこれを見つけました:
// it's a kind of magic (number)
$descr_id = 2;
$url_id = 34;
{いくつかのコード;} //なぜこれを行うのか覚えていませんが、機能します...
今日これに出くわした:
/// <summary>
/// The Page_Load runs when the page loads
/// </summary>
private void Page_Load(Object sender, EventArgs e) {}
誰かが私に彼のプログラムが作成したバイナリファイルを記述したcファイルを送ってくれました。
実際のデータの書き込みのどこかを除いて、コメントは含まれていませんでした
SwapArray(..); // Big endian ???
write();
SwapArrayの実装について尋ねたところ、彼はそれは必要ないと言った。それはLinuxマシンで動作することを確認するためだけだ。
実験した後、彼はどこでもリトルエンディアンを使用していることがわかりました(これは通常のようです)が、実際のデータのみがビッグエンディアンで書き込まれていました。通常は16進エディタで表示できますが、データは浮動小数点で格納されているため、混合エンディアンに気付くのはそれほど簡単ではありません。
トップ・オブ・ザ・ポップスは確かに
// This code should never be called
実際、私はこれらのいくつかを持っています、
// 18042009: (Name here) made me do this
それらのコメントをあまり誇りに思っていませんが、なぜ私がその特定のセクションでWTFコードを作成したのかを思い出させるために、その点で非常に役立ちます。
//緊急の作業:このたわごとを再実装します。古いコードは地獄のように壊れています...そして私たちはすべての問題を解決したと考えました
私の古いプロジェクトの1つでそれを見つけました。最初は笑いましたが、まだバグが見つからなかったので、結局は噛みつきました。