C#で単精度座標値を使用してカスタム3D Point
クラスを作成する際に、2点間の距離を計算するメソッドを作成する必要がありました。それで、私はA -> B
のグラフ表記が "AからBへ"を意味すると考えました。そして、点Aが点Bより大きいと考えるのは意味がないので、>
演算子のオーバーロードについて考えました(さらに、->
演算子は過負荷になる)。難読化されたコードは時々役立つことができますか?
だから私は、次のメソッドを作成しました:これは、このようなコードになり
/// <summary>
/// Calculates the Manhattan distance between the two points.
/// </summary>
public static float operator>(Point p1, Point p2)
{
return Math.Abs(p1.X - p2.X) +
Math.Abs(p1.Y - p2.Y) +
Math.Abs(p1.Z - p2.Z);
}
/// <summary>
/// Calculates the euclidean distance between the two points.
/// </summary>
public static double operator>=(Point p1, Point p2)
{
return Math.Sqrt(Math.Pow(p1.X - p2.X, 2) +
Math.Pow(p1.Y - p2.Y, 2) +
Math.Pow(p1.Z - p2.Z, 2));
}
を:
var manhattan = A > B;
var euclidean = A >= B;
コードを難読化しているようだが、あなたはそれの把握を得れば、それはかなりあります簡単に読むことができ、A.DistanceTo(B)
を使用するよりも短くなります。
私はこの種のコードを完全に避けるべきですか?もしそうなら、理由は何ですか?私はきれいなコードにかなり心配しています、そして、私はこれがと考えられると確信していませんかどうか分かりません。そのようなコードが許されると思われる場合は、例を挙げることができますか?
'> = '演算子はほぼ普遍的に「より大きい」または「等しい」として知られているため、ここではそれをひどく邪魔しています。ほとんどの人がその演算子を見て、「なぜAがBよりも大きければ教えてくれないの? – casperOne
6ヶ月であなたのコードを維持し、なぜAがBよりも大きいかどうかをチェックしているのだろうかと思い始めます。代わりに 'DistanceTo'メソッドを使うのは悪いですか?それは、私には、あなたがしていることをより明確に説明しています。 – Default
クラスで意味をなさない別の演算子を使うことができるかもしれません。>>(ビットディスプレースメント) – Gusman